如何通过在lambda函数内部收集IntStream来操作值(类型不匹配:lambda参数与Integer)

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

假设我有一个IntStream,我想得到例如来自某个集合things的项目列表,其索引在该流中。

我以为会很简单

IntStream.range(0, 10).collect(Collectors.toList(
    _i -> things[_i]
))

但是出现类型不兼容的问题(<lambda parameter>与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方法中实现类似的行为,或者如果我尝试的是一个坏主意-为什么,什么是一个好的替代方法?

java stream
2个回答
0
投票

[这让我感到惊讶,因为类似的方法toMap似乎可以正常工作

您可以使用mapToObj以与地图nu相同的方式进行制作

List<Thing> collect = IntStream.range(0, 10)
        .mapToObj(_i -> things[_i])
        .collect(Collectors.toList());

-1
投票

1)我想得到例如来自某些集合事物的项目列表,这些事物的索引在该流中

对于第一个问题,您必须使用mapToObj中间运算。

List<ObjectType> res = IntStream.range(0, 10)
                                .mapToObj(i-> things.get(i))
                                .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.