如何解决从字符列表“List<Character>”转换为字符数组“char[]”
Java 中将 List<Character> list
转换为字符数组 char[] chars
的方法是什么。
我想要这个,以便以后我可以使用 String
创建一个 String(chars)
。
我们有使用 Stream
的快捷方式吗?
我看到我们可以从 List<Integer>
(或 Double
和 Long
)转换为 int[]
(或 double[]
和 long[]
),但类似的功能不适用于 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;
}
解决方法
TL;DR
你可以这样做(例如):
list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();
但是,如果您想将其作为 String
直接使用:
list.stream().map(Object::toString).collect(Collectors.joining());
详细解答
我看到我们可以从 List (...) 转换,但类似的功能不是 可用于 char,因为我们没有 IntStream 的 char 等价物?
是的,因为您可以结合内置方法 mapToInt
和 toArray
来获得免费的转换。这同样不适用于 char
类型。尽管如此,您仍然可以使用泛型 map,转换为 String
,然后再次转换为字符数组:
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','o');
String collect = list.stream().map(String::valueOf).collect(Collectors.joining());
System.out.println(collect);
}
输出
Hello
,
private static char[] getCharArray(List<Character> charList) {
return charList.stream()
.map(String::valueOf)
.collect(StringBuilder::new,StringBuilder::append,StringBuilder::append)
.toString()
.toCharArray();
}
请注意,这是在构造一个 String
,它由 Java 内部的 char[] 支持。来自 toCharArray()
将此字符串转换为新的字符数组。
退货:一个新的 分配的字符数组,其长度为该字符串的长度 并且其内容被初始化为包含字符序列 由这个字符串表示。
因此,这将在内部创建两个 char[](一个用于支持字符串)并且 toCharArray
返回一个具有相同内容的新数组。
将每个 Character
转换为 String
非常慢
所以这样
int[] tmp = list.stream().mapToInt( c -> c ).toArray();
仅转换为 String
一次
String rslt = new String( tmp,tmp.length );
如果您也需要char[]
char[] array = rslt.toCharArray();
(某人需要 List<Character>
做什么?)
没有特殊的 Stream
方法可以将 List<Character>
转换为原始数组 char[]
,但您可以使用 {{ 1}},例如:
IntStream
,
您可以在没有 Streams 的情况下做到这一点。查看类List的方法toArray(T[] a)。它完全符合您的要求。您需要做的就是:
Character[] charArray = charList.toArray(new Character[charList.size()]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。