seb*_*007 5 java java-8 java-stream
我可以将以下代码减少到一行/两行吗?
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());
Run Code Online (Sandbox Code Playgroud)
在这里使用单个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());
Run Code Online (Sandbox Code Playgroud)
我想你可以做类似的事情
List<Integer> reducedId = dtos.stream().map(DTO::getFirstId).distinct().filter(
(dtos.stream().map(DTO::getSecondId).distinct().collect(Collectors.toList()))::contains
).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
没有在我当地测试过,但对我来说似乎合理:)
归档时间: |
|
查看次数: |
4881 次 |
最近记录: |