gpt4 book ai didi

java - 使用 Java 8 流将 long[] 转换为 String

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:59 25 4
gpt4 key购买 nike

我想将像 long[] l1 = { 1, 2, 3, 4 }; 这样的原始长数组转换为字符串。此字符串应具有这些值中的每一个,由 , 作为分隔符分隔。

我想通过使用 Java 8 的流来实现这一点。我已经将其用于 Long[] 数组,但出于某种原因我无法将其用于原始 long[]

public static void main(String[] args) {
long[] l1 = { 1, 2, 3, 4 };
Long[] l2 = new Long[4];
l2[0] = new Long(1);
l2[1] = new Long(2);
l2[2] = new Long(3);
l2[3] = new Long(4);
System.out.println(longToString(l2));
}

public static String longToString(Long... l) {
String[] x = Arrays.stream(l).map(String::valueOf).toArray(String[]::new);
String y = Arrays.stream(x).collect(Collectors.joining(","));
return y;
}

如何让 longToString(long... l) 而不是 longToString(Long... l) 工作?

另外:我是否设法找到了转换它的最佳方法,或者可以进一步简化它?我对 Java 8 的流功能还很陌生。

最佳答案

使它适用于原始数组的一种方法是:

long[] arr = { 1, 2, 3, 4 };
Arrays.stream(arr).mapToObj(l -> ((Long) l).toString()).collect(Collectors.joining(","))

this answer 中所述, Arrays.stream(long[])创建LongStream , 不是 Stream<Long> , 所以你需要使用 mapToObj() 方法,将产生 Stream<String>在这种情况下。

您可以使用 String.valueOf() 使此版本更加紧凑而不是 Long.toString()正如塔吉尔在他的评论中提到的那样。因为String.valueOf为许多不同的类型重载,您不必将对象转换为 Long,只需使用对 String.valueOf 的方法引用像这样:

Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))

其他选择是调用 boxed() 关于 Arrays.stream(long[]) 的结果得到Stream<Long>然后你可以调用map() :

Arrays.stream(arr).boxed().map(String::valueOf).collect(Collectors.joining(","))

关于java - 使用 Java 8 流将 long[] 转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059516/

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