Created
June 16, 2018 08:27
-
-
Save jnizet/ff0e516c65240264441ff0049a5d4c56 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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