我有一组值对象:
Set<EntityKey> clientAssignedPlaceholderEntityKeys
EntityKey类具有以下属性:
private Integer objectRef;
private String entityType;
使用流将不同的objectRef值提取到排序列表中的最有效方法是什么?
我有以下内容,但它两次调用stream()的事实似乎是一种难闻的气味:
// Extract into a sorted list all the distinct placeholder objectRefs (regardless of type).
List<Integer> sortedPlaceholderObjectRefs = clientAssignedPlaceholderEntityKeys.stream()
.map(entityKey -> entityKey.getObjectRef())
.collect(Collectors.toSet())
.stream() // having to call stream() a 2nd time here feels sub-optimal
.sorted()
.collect(Collectors.toList());
答案 0 :(得分:4)
也许:
sortedPlaceholderObjectRefs = clientAssignedPlaceholderEntityKeys.stream()
.map(entityKey -> entityKey.getObjectRef())
.sorted()
.distinct()
.collect(Collectors.toList());
编辑:
在.distinct()
之前致电.sorted()
可能更合适
答案 1 :(得分:2)
List<Integer> sortedRefs = clientAssignedPlaceholderEntityKeys
.stream()
.map(EntityKey::getObjectRef)
.distinct()
.sorted()
.collect(Collectors.toList());
答案 2 :(得分:2)
clientAssignedPlaceholderEntityKeys.stream()
.map(ek -> ek.getObjectRef())
.sorted()
.distinct()
.collect(Collectors.toList());
关于您对 sorted()和 distinct()
的顺序的疑问引用here的第一个答案: 在 sorted()之后链接 distinct()操作,该实现将利用数据的排序性质,并避免构建内部HashSet。