当前位置: 首页 > 知识库问答 >
问题:

如何处理java。Java StreamAPI的lang.NumberFormatException

慎风畔
2023-03-14

有没有办法过滤掉所有大于最大值的值,这些值可以存储在使用StreamAPI的Long中?目前的情况是,您可以在前端使用简单的搜索条搜索某些客户,通过使用他们的ID。例如:123456789, 10987654321。如果您在这两个ID之间放置一个“隔离器”,一切都正常。但是如果您忘记了“隔离器”,我的代码试图将12345678910987654321解析为Long,我想这就是问题所在。这会在尝试搜索后导致一个数字格式异常。有没有办法过滤掉这些因为太大而无法解析为Long的数字?

谢谢

String hyphen = "-";
            String[] customerIds = bulkCustomerIdProperty.getValue()
                    .replaceAll("[^0-9]", hyphen)
                    .split(hyphen);
            customerFilter.setCustomerIds(Arrays.asList(customerIds).stream()
                            .filter(n -> !n.isEmpty()) 
                            .map(n -> Long.valueOf(n)) // convert to Long
                            .collect(Collectors.toSet()));
        }

共有2个答案

钱和平
2023-03-14

也许你可以添加另一个过滤器,比如

.filter(n -> n <= Long.MAX_VALUE)

您还可以使用try/catch在发生这种情况时抛出错误并通知前端

令狐声
2023-03-14

您可以将解析提取到单独的方法中,并使用try/catch将其包装,或者使用biginger消除超出long范围的值。

Set<Long> result =  Stream.of("", "12345", "9999999999999999999999999999")
        .filter(n -> !n.isEmpty())
        .map(BigInteger::new)
        .filter(n -> n.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) <= 0 &&
                     n.compareTo(BigInteger.valueOf(Long.MIN_VALUE)) >= 0)
        .map(BigInteger::longValueExact) // convert to Long
        .peek(System.out::println)
        .collect(Collectors.toSet());

输出(来自peek()

12345
 类似资料:
  • foo(8073)调用foo(8074) foo(8074)调用foo(8075),foo(8075) foo(8074)记录自身并调用bar(8075), foo(8074)死亡,foo(8073)捕获它,记录自己并调用bar(8074) bar(8074)调用bar(8075),bar(8074)死亡,因此bar(8074)记录自己 从所有方法返回,并优雅地关闭 我明白了,一切都很好。所以有一

  • 问题内容: 在开发高度基于XML的Java应用程序时,我最近在Ubuntu Linux上遇到了一个有趣的问题。 我的应用程序使用Java Plugin Framework ,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现。 在控制台上,我了解到发生了错误: 我认为问题是由来自JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的。 据我所知,不可能为框架指定一个类加载

  • 问题内容: 在开发一个高度基于XML的Java应用程序时,我最近在Ubuntu Linux上遇到了一个有趣的问题。 我的应用程序使用Java Plugin Framework ,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现。 在控制台上,我了解到发生了错误: 我认为问题是由JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的。 据我所知,不可能为框架指定一个类加载

  • 问题内容: 它是否只是在每次除法后检查除数是否等于零(即使在JIT版代码中)? 我的意思是VM如何在不被OS杀死的情况下设法引发异常? 问题答案: 在一个Unix环境,在这种划分被零是通过主导,JVM将已安装的陷阱的信号处理程序,进而S上的。如果您对内部结构感兴趣,请参见例如 我认为OP提出的要求是基于这样一个事实,即直到/除非有处理程序到位,大多数进程都会在接收到此信号时采取默认操作,即终止操作

  • 本文向大家介绍如何在Java中处理Selenium中的代理?,包括了如何在Java中处理Selenium中的代理?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助PROXY类在Java中使用Selenium处理代理。

  • 问题内容: 如何用Java 处理? 问题答案: 我不确定“句柄”是什么意思。 您当然可以捕获该错误: 但这很可能是个坏主意,除非您确切地知道自己在做什么。