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

标签 java java-stream

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

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()); 

关于java - 如何从两个列表中排除非单个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66230007/

相关文章:

java - 使用 Google Endpoints 将图片上传到 Google Cloud Storage

java - Lombok build 者的继承

Java 8 流 - 合并两个集合,使其在特定领域保持唯一

java - 将列表值流式传输到 Map.Entry.values

java - 如何使用 Java 8 转换 Map 的每个条目集的键和值?

java - 未加载 log4j2 配置

java - CQ5 OSGi Bundle 错误 - org.json.simple -- 无法解决

java - Java中 'throws'语句的用途是什么?

java - 仅使用两个键和奇数或偶数列表索引作为值将 List 转换为 Map - Java 8 Stream

java - 使用 Streams 添加 BigDecimals