尝试将一组索引映射到列表中的相应对象,然后作为一组返回。
List aList = Arrays.asList(new Object(), new Object(), new Object(), new Object(), new Object(), new Object());
Set.of(0, 2, 3)
.stream()
.flatMap(index -> aList.get(index)) // error on this line
.collect(Collectors.toSet());
Error message: no instance(s) of type variable(s) R exist so that Object conforms to Stream<? extends R>
在此示例中,您需要map
,而不是flatMap
。当原始flatMap
的每个元素映射到多个元素时,将使用Stream
。
Set.of(0, 1, 2)
.stream()
.map(index -> aList.get(index))
.collect(Collectors.toSet());
尽管,当然,它可以不用Stream
就能以更简单的方式完成:
Set<YourType> set = new HashSet<>(aList);
即使具有Stream
,也无需创建索引的Stream
。您可以直接将Stream
移到List
的元素上,然后完全不需要map
步骤:
alist.stream()
.collect(Collectors.toSet());