我有一个例子如下。我只想转换由','分隔的字符串,并将其转换为长数组而不使用空字符串。 productIdParams
包含[1]
,但是当我执行此操作时,我会遇到异常。
java.lang.System.arraycopy(Native Method)中的java.lang.ArrayStoreException java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:194)at at java.util.stream.Nodes $ SpinedNodeBuilder.copyInto(Nodes.java:1290)at at java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215)at at java.util.stream.Nodes $ SpinedNodeBuilder.asArray(Nodes.java:1296)at at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:439)
String test = "1,";
String[] productIdParams = Iterables.toArray(com.google.common.base.Splitter.on(",").omitEmptyStrings().split(test), String.class);
try {
Long[] productIds = Arrays.stream(productIdParams).filter(productId -> !productId.isEmpty()).toArray(Long[]::new);
System.out.println(productIds[0]);
} catch (Exception e) {
e.printStackTrace();
}
有什么不对吗?
感谢。
答案 0 :(得分:6)
您正试图从Long[]
制作String[]
,但这是不允许的。
而是使用map
中间操作将String
值转换为Long
个对象。
Arrays.stream(productIdParams)
.filter(productId -> !productId.isEmpty())
.map(Long::parseLong)
.toArray(Long[]::new);
答案 1 :(得分:2)
您忘了将public class Public{
public class subPublic{ //modify access modifiers
}
}
转换为String
:
Long
调用Long[] productIds = Arrays.stream(productIdParams)
.filter(productId -> !productId.isEmpty())
.map(Long::parseLong)
.toArray(Long[]::new);
时,抛出异常,因为基础数据的类型和大小不同
答案 2 :(得分:1)
保持简单
String test = "1,,2,";
String[] productIdParams = test.split(",");
try {
Long[] productIds = Arrays.stream(productIdParams).filter(productId -> !productId.isEmpty()).map( Long::parseLong).toArray(Long[]::new);
System.out.println(productIds);
} catch (Exception e) {
e.printStackTrace();
}
您的.filter将从数组中删除空格,而.map会将您的字符串转换为地图