使用Java流将索引集映射到对象集

问题描述 投票:0回答:1

尝试将一组索引映射到列表中的相应对象,然后作为一组返回。

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>

java stream java-stream
1个回答
1
投票

在此示例中,您需要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());
© www.soinside.com 2019 - 2024. All rights reserved.