从字符列表 "List<Character>" 转换为字符数组 "char[]"
Convert from a list of characters "List<Character>" to an array of chars "char[]"
Java 中将 List<Character> list
转换为字符数组 char[] chars
的方法是什么。
我想要这个,以便稍后我可以使用 String(chars)
创建一个 String
。
我们有使用 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());
详细解答
I see that we can convert from List (...) but similar functionality is not
available for char as we do not have a char equivalent for IntStream?
是的,因为您可以结合内置方法 mapToInt
和 toArray
来获得 免费 的转换。这同样不适用于 char
类型。尽管如此,您仍然可以使用通用 map,转换为 String
,然后再次转换为字符数组:
list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();
I want this so that later I can create a String using String(chars).
Do we have any shortcuts using 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
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()
的文档
Converts this string to a new character array.
Returns: a newly
allocated character array whose length is the length of this string
and whose contents are initialized to contain the character sequence
represented by this string.
因此,这将在内部创建两个 char[](一个用于支持字符串)和 toCharArray
returns 一个具有相同内容的新数组。
没有 Streams 也可以做到。查看class List 的方法toArray(T[] a)。它正是你想要的。您需要做的就是:
Character[] charArray = charList.toArray(new Character[charList.size()]);
没有特殊的Stream
方法可以将List<Character>
转换为基元数组char[]
,但是你可以自己做IntStream
,例如:
List<Character> list = List.of('a', 'b', 'c');
char[] chars = new char[list.size()];
IntStream.range(0, list.size()).forEach(i -> chars[i] = list.get(i));
System.out.println(Arrays.toString(chars)); // [a, b, c]
将每个 Character
转换为 String
非常慢
所以所以
int[] tmp = list.stream().mapToInt( c -> c ).toArray();
仅转换为 String
一次
String rslt = new String( tmp, 0, tmp.length );
如果你也需要 char[]
char[] array = rslt.toCharArray();
(有人需要List<Character>
干什么?)
Java 中将 List<Character> list
转换为字符数组 char[] chars
的方法是什么。
我想要这个,以便稍后我可以使用 String(chars)
创建一个 String
。
我们有使用 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());
详细解答
I see that we can convert from List (...) but similar functionality is not available for char as we do not have a char equivalent for IntStream?
是的,因为您可以结合内置方法 mapToInt
和 toArray
来获得 免费 的转换。这同样不适用于 char
类型。尽管如此,您仍然可以使用通用 map,转换为 String
,然后再次转换为字符数组:
list.stream().map(Object::toString).collect(Collectors.joining()).toCharArray();
I want this so that later I can create a String using String(chars). Do we have any shortcuts using 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
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()
Converts this string to a new character array.
Returns: a newly allocated character array whose length is the length of this string and whose contents are initialized to contain the character sequence represented by this string.
因此,这将在内部创建两个 char[](一个用于支持字符串)和 toCharArray
returns 一个具有相同内容的新数组。
没有 Streams 也可以做到。查看class List 的方法toArray(T[] a)。它正是你想要的。您需要做的就是:
Character[] charArray = charList.toArray(new Character[charList.size()]);
没有特殊的Stream
方法可以将List<Character>
转换为基元数组char[]
,但是你可以自己做IntStream
,例如:
List<Character> list = List.of('a', 'b', 'c');
char[] chars = new char[list.size()];
IntStream.range(0, list.size()).forEach(i -> chars[i] = list.get(i));
System.out.println(Arrays.toString(chars)); // [a, b, c]
将每个 Character
转换为 String
非常慢
所以所以
int[] tmp = list.stream().mapToInt( c -> c ).toArray();
仅转换为 String
一次
String rslt = new String( tmp, 0, tmp.length );
如果你也需要 char[]
char[] array = rslt.toCharArray();
(有人需要List<Character>
干什么?)