Java 如何在lambda函数中收集IntStream的值

Java 如何在lambda函数中收集IntStream的值,java,java-stream,Java,Java Stream,假设我有一个IntStream,我想从某个集合things中获取一个项目列表,其索引位于该流中 我想这会很简单 IntStream.range(0, 10).collect(Collectors.toList( _i -> things[_i] )) 但是出现了不兼容类型的问题(vs.int)。 无法转换为整数。这让我很惊讶,因为类似的方法toMap似乎工作正常,如果我向流中添加boxed(),那么lambda参数的类型是java.lang.Object,而不是: 我正在使用Ja

假设我有一个
IntStream
,我想从某个集合
things
中获取一个项目列表,其索引位于该流中

我想这会很简单

IntStream.range(0, 10).collect(Collectors.toList(
    _i -> things[_i]
))
但是出现了不兼容类型的问题(
vs.int)。
无法转换为整数。这让我很惊讶,因为类似的方法
toMap
似乎工作正常,如果我向流中添加
boxed()
,那么lambda参数的类型是java.lang.Object,而不是

我正在使用Java12

我如何才能在
toList
方法中实现类似的行为,或者如果我尝试的是一个坏主意——为什么,什么是一个好的替代方法

1) 例如,我想从索引位于该流中的某些集合中获取项目列表

对于第一个问题,您必须使用中间操作,使用
index
从另一个
list
获取元素,并将它们收集到
list

List<ObjectType> res = IntStream.range(0, 10)
                                .mapToObj(i-> things.get(i))   // or mapToObj(things::get)
                                .collect(Collectors.toList());
收集器

public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
                                                Function<? super T,? extends U> valueMapper)
公共静态收集器toMap(函数
1) 例如,我想从索引位于该流中的某些集合中获取项目列表

对于第一个问题,您必须使用中间操作,使用
index
从另一个
list
获取元素,并将它们收集到
list

List<ObjectType> res = IntStream.range(0, 10)
                                .mapToObj(i-> things.get(i))   // or mapToObj(things::get)
                                .collect(Collectors.toList());
收集器

public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
                                                Function<? super T,? extends U> valueMapper)
公共静态收集器toMap(函数
这让我很惊讶,因为类似的方法
toMap
似乎可以正常工作

您可以像这样使用
mapToObj
以与地图相同的方式制作它

List<Thing> collect = IntStream.range(0, 10)
        .mapToObj(_i -> things[_i])
        .collect(Collectors.toList());
List collect=IntStream.range(0,10)
.mapToObj(\u i->things[\u i])
.collect(Collectors.toList());
这让我很惊讶,因为类似的方法
toMap
似乎可以正常工作

您可以像这样使用
mapToObj
以与地图相同的方式制作它

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

作为一个例子,代码> int流。范围(0, 10)非常直观地与<代码>子目录< /代码>相关联。(对于一个数据片段),我认为最好将这样的情况作为一个例子来作为<代码> INT[]/COD>。我不明白为什么你的问题是“不兼容类型”。
不接受参数,并且类型
IntStream
没有接受
收集器的
collect
方法。可能编译器的错误报告有问题(这不会让我感到惊讶)。例如
IntStream.range(0,10)
子列表关联是非常直观的。(对于一个数据片段),我认为最好把这样的例子看作是<代码> int []/COD>。我不明白为什么你的问题是“不兼容类型”。
不接受参数,并且类型
IntStream
没有接受
收集器的
collect
方法。也许编译器的错误报告有问题(这不会让我感到惊讶)。