如何从两个列表中排除非单个项目?

如何使用来自两个列表的流来获取唯一实体的列表?仅按用户名匹配

public class Entity {   
    private String username;
    private String password;
}

    var first = Arrays.asList(
            new Entity("user1", ""),
            new Entity("user2", "")
            new Entity("user3", "pass3"),
            new Entity("user5", "pass5")
            
    );

    var second = Arrays.asList(
            new Entity("user1", "pass1"),
            new Entity("user2", "pass2"),
 
    );

    public static void foo(List<Entity> first, List<Entity> second) {
      List<Entity>result = Stream.of(first, second)
            .flatMap(List::stream)
            ? 
            ?
            .collect(Collectors.toList());
      }

结果必须是包含 Entity("user3", "pass3") 和 Entity("user5", "pass5") 的列表

回答

您可以按用户名进行分组:

var groupedData = Stream.concat(list1.stream(), list2.stream())
                .collect(Collectors.groupingBy(Entity::getUsername));

然后过滤大小> 1的实体:

groupedData.values().stream()
            .filter(s -> s.size() == 1)
            .flatMap(Collection::stream)
            .collect(Collectors.toList());

或者只有一个大流:

Stream.concat(list1.stream(), list2.stream())
                .collect(Collectors.groupingBy(Entity::getUsername)).values().stream()
                .filter(s -> s.size() == 1)
                .flatMap(Collection::stream)
                .collect(Collectors.toList()); 


以上是如何从两个列表中排除非单个项目?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>