我遇到了一个我没有遇到的问题;无法解决...
我有3种物体
MyObject1-具有字段ID和名称
MyObject2-具有字段ID和错误
MyJoinObject-具有字段ID,名称和错误
我有2个清单:
MyObject1的列表
MyObject2列表
我想创建MyJoinObject的第三个列表,它是2个列表的联接。
将有MyJoinObject对象作为MyObject1对象,但它们也将包含错误(如果存在)(由id联接)。
我想用Java 8流来做到这一点。
最佳答案
您可以这样做:
List<MyJoinObject> result =
list1.stream().map( o1 -> {
Optional<MyObject2> error = list2.steam()
.filter( o2 -> o2.getId() == o1.getId() )
.findAny();
if ( error.isPresent() )
return new MyJoinObject( o1.getId(), o1.getName(), error.get().getError() );
return new MyJoinObject( o1.getId(), o1.getName() );
} ).collect( Collectors.toList() );
您还可以在这样做之前构造一个由id映射的错误的hasmap:
final Map<Integer, MyObject2> errorsById =
list2.stream( )
.collect( Collectors.toMap( MyObject2::getId, Function.identity( ) ) );
如果这样做,则可以通过调用方法
containsKey( )
或get( )
使用此映射来获取错误