,java,list,java-8,char,java-stream"/>

首页 > 解决方案 > 从字符列表转换“列表" 到一个字符数组 "char[]"

问题描述

什么是 Java 中从List<Character> listchar 数组转换的方法char[] chars

我想要这个,以便以后我可以创建一个Stringusing String(chars). 我们有使用的快捷方式Stream吗?

我看到我们可以从List<Integer>(Or Doubleand Long) 转换为int[](or double[]and long[]),但是类似的功能不可用,char因为我们没有 char 等价物IntStream

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

我目前的代码是:

new String(getCharArray(charList))
private static char[] getCharArray(List<Character> charList) {
    char[] charArray = new char[charList.size()];
    for (int i = 0; i < charArray.length; i++) {
        charArray[i] = charList.get(i);
    }
    return charArray;
}

标签: javalistjava-8charjava-stream

解决方案


TL;博士

你可以这样做(例如):

list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();

但是,如果您想String直接使用它:

list.stream().map(Object::toString).collect(Collectors.joining());

详细解答

我看到我们可以从 List (...) 转换,但类似的功能不适用于 char,因为我们没有 IntStream 的 char 等效项?

是的,因为您可以结合内置方法mapToInt免费toArray获得转换。并且同样不适用于 type 。尽管如此,您仍然可以使用通用map,转换为 a ,然后再转换为字符数组:charString

  list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();

我想要这个,以便稍后我可以使用 String(chars) 创建一个字符串。我们有使用 Stream 的快捷方式吗?

那为什么不直接做呢?!:

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);
}

输出

Hello

推荐阅读