假设我有一个 IntStream
我想得到例如一些 Collection 品的 list things
其索引在该流中。
我以为会这么简单
IntStream.range(0, 10).collect(Collectors.toList(
_i -> things[_i]
))
但是出现了类型不兼容的问题(<lambda parameter>
vs. int)。
<lambda parameter>
不能转换为整数。这让我感到惊讶,因为类似的方法 toMap
似乎工作正常,如果我添加 boxed()
到流——然后 lambda 参数的类型是 java.lang.Object 而不是 <lambda parameter>
:
IntStream.range(0, 10).boxed().collect(Collectors.toMap(
_i -> things[_i], _i -> 1
))
我正在使用 Java 12。
如何在 toList
中实现类似的行为?方法,或者如果我正在尝试的完全是个坏主意——为什么,以及什么是好的替代方法?
最佳答案
1) I would like to get e.g. a list of items from some collection things whose index is in that stream
对于第一个问题,您必须使用 mapToObj中间操作,从另一个list
获取元素使用 index
并将它们收集到 List
中
List<ObjectType> res = IntStream.range(0, 10)
.mapToObj(i-> things.get(i)) // or mapToObj(things::get)
.collect(Collectors.toList());
2) This surprised me because a similar method toMap seems to work fine, if I add boxed() to the stream
第二个问题boxed()将创建一个 Stream
的 Integer
(如 Stream<Integer>
),是 Stream
有collect将结果收集到 Map
通过使用 Collectors.toMap .这是 article更多信息
流
<R,A> R collect(Collector<? super T,A,R> collector)
Collection 家
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper)
关于java - 如何在 lambda 函数中对收集 IntStream 的值进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790828/