pim*_*eys 4 java java-8 java-stream
我想将原始长数组转换long[] l1 = { 1, 2, 3, 4 };为String.此String应具有这些值中的每一个,以,as分隔符分隔.
我想通过使用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;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这项工作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(","))
Run Code Online (Sandbox Code Playgroud)
正如在这个答案中所解释的那样,Arrays.stream(long[])创建LongStream,而不是Stream<Long>,所以你需要使用在这种情况下mapToObj()会产生的方法Stream<String>.
你可以让这个版本更加紧凑,使用String.valueOf(),而不是Long.toString()作为Tagir提到了他的评论.因为String.valueOf许多不同类型的重载,您不必将对象强制转换为Long,只需使用方法引用,String.valueOf如下所示:
Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))
Run Code Online (Sandbox Code Playgroud)
其他选项是调用boxed()上的结果Arrays.stream(long[])得到Stream<Long>的,你可以调用map():
Arrays.stream(arr).boxed().map(String::valueOf).collect(Collectors.joining(","))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5026 次 |
| 最近记录: |