gpt4 book ai didi

java - 如何在 Java 中将 List 转换为 int[]?

转载 作者:行者123 更新时间:2023-12-01 05:49:53 27 4
gpt4 key购买 nike

如何转换 List<Integer>int[]在Java 中?

我很困惑,因为List.toArray()实际上返回一个 Object[] ,不能转换为 Integer[]也不int[] .

现在我正在使用循环来执行此操作:

int[] toIntArray(List<Integer> list) {
int[] ret = new int[list.size()];
for(int i = 0; i < ret.length; i++)
ret[i] = list.get(i);
return ret;
}

有更好的方法吗?

这与问题类似 How can I convert int[] to Integer[] in Java? .

最佳答案

通过 Java 8 中添加的流,我们可以编写如下代码:

int[] example1 = list.stream().mapToInt(i->i).toArray();
// OR
int[] example2 = list.stream().mapToInt(Integer::intValue).toArray();
<小时/>

思考过程:

  • 简单Stream#toArray返回 Object[]数组,所以这不是我们想要的。另外,Stream#toArray(IntFunction<A[]> generator)返回 A[]没有做我们想要的,因为通用类型 A无法表示原始类型int

  • 因此,如果有某种旨在处理原始类型的流就好了 int而不是像 Integer 这样的引用类型,因为它 toArray方法很可能还会返回 int[]数组(返回像 Object[] 之类的东西,甚至是装箱的 Integer[] 对于 int 来说都是不自然的)。幸运的是,Java 8 有这样一个流: IntStream

  • 所以现在我们唯一需要弄清楚的是如何转换我们的 Stream<Integer> (将从 list.stream() 返回)到 Shiny 的 IntStream .

    快速搜索 Stream 的文档在寻找返回 IntStream 的方法时向我们指出我们的解决方案是 mapToInt(ToIntFunction<? super T> mapper) 方法。我们需要做的就是提供一个来自 Integer 的映射。至int .

    ToIntFunction 函数式接口(interface),我们还可以通过lambda方法引用提供其实例。

    无论如何,要将 Integer 转换为 int,我们可以使用 Integer#intValue 所以里面mapToInt我们可以写:

    mapToInt( (Integer i) -> i.intValue() )

    (或者有些人可能更喜欢:mapToInt(Integer::intValue)。)

    但是可以使用拆箱生成类似的代码,因为编译器知道此 lambda 的结果必须是 int 类型。 (mapToInt 中使用的 lambda 是 ToIntFunction 接口(interface)的实现,该接口(interface)期望类型为 int applyAsInt(T value) 的方法作为主体,该方法预计返回 int )。

    所以我们可以简单地写:

    mapToInt((Integer i)->i)

    此外,自从 Integer输入 (Integer i)编译器可以推断出 List<Integer>#stream()返回 Stream<Integer> ,我们也可以跳过它,这给我们留下

    mapToInt(i -> i)

关于java - 如何在 Java 中将 List<Integer> 转换为 int[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com