java 8 - Arrays.stream().filter 过滤掉空字符串并转换为数组

标签 java collections java-8

我有一个例子如下。我只想转换由“,”分隔的字符串,并将其转换为没有空字符串的长数组。 productIdParams 包含 [1],但是当我执行此操作时,出现异常。

java.lang.ArrayStoreException at java.lang.System.arraycopy(Native Method) at java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:194) at java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Nodes.java:1290) at java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215) at java.util.stream.Nodes$SpinedNodeBuilder.asArray(Nodes.java:1296) 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();
}

有什么问题吗?

谢谢。

最佳答案

您正在尝试从 String[] 生成 Long[],这是不允许的。 相反,请使用 map 中间操作将 String 值转换为 Long 对象。

Arrays.stream(productIdParams)
      .filter(productId -> !productId.isEmpty())
      .map(Long::parseLong)
      .toArray(Long[]::new);

关于java 8 - Arrays.stream().filter 过滤掉空字符串并转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50459393/

相关文章:

java - 在 Collection<A> 中获取 max(A.x) 的最简洁方法

java - 使用流组成函数数组

java - 迭代器有 .next() - 有没有办法获取前一个元素而不是下一个元素?

python - 访问 collections.deque 长度的时间复杂度

java - 将 InputStream 转换为 FileInputStream

Java:如何使用自定义 Ant build.xml 将 ProGuard 集成到 Jar 项目中

Magento - list.phtml 过滤产品集合未给出正确的分页

java - 如何对空的 Optional 执行 null 检查

java - 使用注释插件 + JAXB 在 java 'field' 中插入自定义注释(基于 xsd -> java)

java - 托管在 Internet 上运行的 Java Web 应用程序