Skip to content

Instantly share code, notes, and snippets.

@jnizet
Created June 16, 2018 08:27
Show Gist options
  • Save jnizet/ff0e516c65240264441ff0049a5d4c56 to your computer and use it in GitHub Desktop.
Save jnizet/ff0e516c65240264441ff0049a5d4c56 to your computer and use it in GitHub Desktop.
interface EntityVisitor<T> {
T visitGood(Good good);
T visitBad(Bad bad);
}
class Good {
<T> T accept(EntityVisitor<T> visitor) {
return visitor.visitGood(this);
}
}
class Bad {
<T> T accept(EntityVisitor<T> visitor) {
return visitor.visitBad(this);
}
}
public class UberMapper implements EntityVisitor<XXXDTO> {
private GoodMapper goodMapper;
private BadMapper badMapper;
@Autowired
public UberMapper(GoodMapper goodMapper, BadMapper badMapper) {
this.goodMapper = goodMapper;
this.badMapper = badMapper;
}
@Override
public XXXDTO visitGood(Good good) {
return goodMapper.map(good);
}
@Override
public XXXDTO visitBad(Bad bad) {
return badMapper.map(bad);
}
}
public class XXXService {
private final UberMapper uberMapper;
@Autowired
public XXXService(UberMapper uberMapper) {
this.uberMapper = uberMapper;
}
public Stream<XXXDTO> aggregate(Stream<Bad> badStream, Stream<Good> goodStream) {
return Stream.concat(badStream.map(bad -> bad.accept(uberMapper)),
goodStream.map(good -> good.accept(uberMapper)));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment