我可以将以下代码缩减为一两行吗?

DTO dto;
List<DTO> dtos;
List<Integer> list1 = dtos.stream().map(DTO::getFirstId).distinct().collect(Collectors.toList());
List<Integer> list2 = dtos.stream().map(DTO::getSecondId).distinct().collect(Collectors.toList());

List<Integer> reducedId = list1.stream().filter(list2::contains).collect(Collectors.toList());

最佳答案

在这里使用单个Java 8流不是一个很好的选择。
相反,您应该首先创建一个Set,以便可以执行有效的包含测试。

Set<Integer> secondIds = dtos.stream().map(DTO::getSecondId).collect(Collectors.toSet());
List<Integer> reducedIds = dtos.stream().map(DTO::getFirstId).distinct()
        .filter(secondIds::contains).collect(Collectors.toList());

关于java - Java 8流唯一整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42440189/

10-10 18:56