我遇到了一个我没有遇到的问题;无法解决...

我有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( )使用此映射来获取错误

10-06 05:14