3 回答
TA贡献1829条经验 获得超6个赞
int[] array = list.stream().mapToInt(i->i).toArray();
简约 Stream#toArray回报 Object[]所以这不是我们想要的。也 Stream#toArray(IntFunction<A[]> generator)不做我们想做的事,因为泛型类型 A不能表示原语 int所以最好有一些可以处理原语类型的流。 int,因为它 toArray方法很可能也会返回。 int[]数组(返回类似于 Object[]甚至是盒装 Integer[]在这里是不自然的)。幸运的是,Java 8有这样的流: IntStream所以现在我们唯一需要解决的就是如何把我们的 Stream<Integer>(将从 list.stream())到那闪闪发亮的 IntStream..这里 mapToInt方法来拯救。我们所需要做的就是提供一些映射 Integer到 int..我们可以用这样的方法 Integer#getValue返回 int:mapToInt( (Integer i) -> i.intValue())(或者如果有人愿意 mapToInt(Integer::intValue))但是可以使用unbox生成类似的代码,因为编译器知道这个lambda的结果必须是 int(Lambda in mapToInt正在实施 ToIntFunction接口,该接口期望主体为 int applyAsInt(T value)方法,它将返回 int).所以我们可以简单地写 mapToInt((Integer i)->i)或更简单(因为 Integer i类型可以由编译器推断,因为 List<Integer>#stream()回报 Stream<Integer>)mapToInt(i -> i)
添加回答
举报
