Java 从字符列表“list”转换为字符数组“char[]”

Java 从字符列表“list”转换为字符数组“char[]”,java,list,java-8,char,java-stream,Java,List,Java 8,Char,Java Stream,在Java中,将列表转换为char数组char[]chars的方法是什么 我希望这样,以便以后可以使用Stringchars创建字符串。 我们有使用流的快捷方式吗 我看到我们可以从List或Double和Long转换为int[]或Double[]和Long[],但是类似的功能不适用于char,因为我们没有对应于IntStream的char 请建议我们是否有一个快速的方法来做到这一点 我目前的代码是: 新StringGetCharrayCharlist 私有静态字符[]getCharArrayLi

在Java中,将列表转换为char数组char[]chars的方法是什么

我希望这样,以便以后可以使用Stringchars创建字符串。 我们有使用流的快捷方式吗

我看到我们可以从List或Double和Long转换为int[]或Double[]和Long[],但是类似的功能不适用于char,因为我们没有对应于IntStream的char

请建议我们是否有一个快速的方法来做到这一点

我目前的代码是:

新StringGetCharrayCharlist 私有静态字符[]getCharArrayList字符列表{ char[]charArray=新字符[charList.size]; 对于int i=0;i 例如,您可以通过以下方式完成:

list.stream.mapObject::toString.collectCollectors.joining.toCharArray

但是,如果要将其作为字符串,请直接执行以下操作:

list.stream().map(Object::toString).collect(Collectors.joining());
详细答案

我知道我们可以从列表中转换。。。但类似的功能并不适用 可用于char,因为我们没有用于IntStream的char等价物

是的,因为您可以将内置方法mapToInt和toArray结合起来,免费获得转换。同样的情况也不适用于char类型。尽管如此,您仍然可以使用泛型,转换为字符串,然后再转换为字符数组:

  list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();
我希望这样,以便以后可以使用Stringchars创建字符串。 我们有使用流的快捷方式吗

那为什么不直接做呢

String collect = list.stream()
                     .map(String::valueOf)
                     .collect(Collectors.joining());
运行示例:

public static void main(String[] args) {
    List<Character> list = List.of('H', 'e','l','l','o');
    String collect = list.stream().map(String::valueOf).collect(Collectors.joining());
    System.out.println(collect);
}
TL;博士

例如,您可以通过以下方式完成:

list.stream.mapObject::toString.collectCollectors.joining.toCharArray

但是,如果要将其作为字符串,请直接执行以下操作:

list.stream().map(Object::toString).collect(Collectors.joining());
详细答案

我知道我们可以从列表中转换。。。但类似的功能并不适用 可用于char,因为我们没有用于IntStream的char等价物

是的,因为您可以将内置方法mapToInt和toArray结合起来,免费获得转换。同样的情况也不适用于char类型。尽管如此,您仍然可以使用泛型,转换为字符串,然后再转换为字符数组:

  list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();
我希望这样,以便以后可以使用Stringchars创建字符串。 我们有使用流的快捷方式吗

那为什么不直接做呢

String collect = list.stream()
                     .map(String::valueOf)
                     .collect(Collectors.joining());
运行示例:

public static void main(String[] args) {
    List<Character> list = List.of('H', 'e','l','l','o');
    String collect = list.stream().map(String::valueOf).collect(Collectors.joining());
    System.out.println(collect);
}
请注意,这是在构造一个字符串,该字符串由Java内部的char[]支持。来自托克拉里的文件

将此字符串转换为新的字符数组

返回:一个新的 已分配的字符数组,其长度为该字符串的长度 其内容初始化为包含字符序列 由这个字符串表示

因此,这将在内部创建两个char[]一个作为支持字符串,ToCharray返回一个具有相同内容的新数组

请注意,这是在构造一个字符串,该字符串由Java内部的char[]支持。来自托克拉里的文件

将此字符串转换为新的字符数组

返回:一个新的 已分配的字符数组,其长度为该字符串的长度 其内容初始化为包含字符序列 由这个字符串表示


因此,这将在内部创建两个char[]一个作为支持字符串,ToCharray返回一个具有相同内容的新数组。

您可以在没有流的情况下执行此操作。看看类列表的方法。这正是你想要的。您需要做的只是:

Character[] charArray = charList.toArray(new Character[charList.size()]);

你可以不用溪流。看看类列表的方法。这正是你想要的。您需要做的只是:

Character[] charArray = charList.toArray(new Character[charList.size()]);
没有特殊的流方法可以将列表转换为原语数组char[],但您可以使用IntStream自己进行转换,例如:

列表=a、b、c的列表; char[]chars=新字符[list.size]; IntStream.range0,list.size.forEachi->chars[i]=list.geti; System.out.printlnArrays.toStringchars;//[甲、乙、丙] 没有特殊的流方法可以将列表转换为原语数组char[],但您可以使用IntStream自己进行转换,例如:

列表=a、b、c的列表; char[]chars=新字符[list.size]; IntStream.range0,list.size.forEachi->chars[i]=list.geti; System.out.printlnArrays.toStringchars;//[甲、乙、丙] 将每个字符转换为字符串的速度非常慢 所以

int[] tmp = list.stream().mapToInt( c -> c ).toArray();
仅转换为字符串一次

String rslt = new String( tmp, 0, tmp.length );
如果您也需要字符[]

有人需要列表做什么?

将每个字符转换为字符串的速度非常慢 所以

int[] tmp = list.stream().mapToInt( c -> c ).toArray();
仅转换为字符串一次

String rslt = new String( tmp, 0, tmp.length );
如果您也需要字符[]


有人需要列表做什么?

你能试着编译一下吗?字符[]与字符[]不同。只是一个简单的打字错误。改变答案。但该方法仍然是正确的使用方法。将charList.size传递给数组有助于提高性能,这是一个根深蒂固的神话。事实上,charList.toArraynew
字符[0]更有效。如果你对细节感兴趣,你可以阅读@Holger我不明白为什么有人会有一份清单。想法?@AniketSahrawat你必须问提问者。你能试着整理一下吗?字符[]与字符[]不同。只是一个简单的打字错误。改变答案。但该方法仍然是正确的使用方法。将charList.size传递给数组有助于提高性能,这是一个根深蒂固的神话。事实上,charList.toArraynew字符[0]更有效。如果你对细节感兴趣,你可以阅读@Holger我不明白为什么有人会有一份清单。想法?@AniketSahrawat你必须问提问者。步骤的.mapString::valueOf已过时。由于OP说“我想要这个,这样以后我就可以创建一个字符串了”,所以只要省略toCharArray并已经有了字符串,这个解决方案就可以变得更加高效。步骤的.mapString::valueOf已经过时了。既然OP说“我想要这个,这样以后我就可以创建一个字符串”,那么这个解决方案可以通过省略toCharArray并已经有了字符串而变得更加有效。