我想将像 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/