是否有办法过滤掉所有大于最大值的值,这些值可以使用Stream API存储在Long
中?
目前的情况是,你可以在前端用一个简单的搜索栏搜索一些客户的身份证。
例如:123456789、10987654321
如果在这两个ID之间放置一个“分隔符”,一切都会正常工作。但是,如果你忘记了“分隔符”,我的代码试图将
12345678910987654321
解析为一个长字符串,我想这就是问题所在。
这会在尝试搜索后导致出现
NumberFormatException
。有没有办法过滤掉那些因为太大而无法解析为长的
?
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()));
也许你可以添加另一个过滤器,比如
.filter((n) -> { return new BigInteger(n).compareTo(new BigInteger(String.valueOf(Long.MAX_VALUE))) <= 0;})
您还可以使用try/catch在发生这种情况时抛出错误并通知前端
您可以将解析提取到一个单独的方法中,并用try/catch
将其包装,或者使用biginger
消除超出long
范围的值。
带有BigInteger
的示例:
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) // printing the output
.collect(Collectors.toSet());
在单独的方法中处理NumberFormatExctive
的示例:
Set<Long> result = Stream.of("", "12345", "9999999999999999999999999999")
.filter(n -> !n.isEmpty())
.map(n -> safeParse(n))
.filter(OptionalLong::isPresent)
.map(OptionalLong::getAsLong) // extracting long primitive and boxing it into Long
.peek(System.out::println) // printing the output
.collect(Collectors.toSet());
public static OptionalLong safeParse(String candidate) {
try {
return OptionalLong.of(Long.parseLong(candidate));
} catch (NumberFormatException e) {
return OptionalLong.empty();
}
}
输出(来自peek()
)
12345
问题内容: 我正在连接到一个网站,正在登录。 该网站将我重定向到新页面,并且Mechanize处理所有cookie和重定向作业,但是,我找不到最后一页。我使用Firebug并再次完成了相同的工作,然后发现我必须通过Mechanize传递另外两页。 我快速浏览了一下页面,发现有一些JavaScript和HTML代码,但由于它看起来不像普通的页面代码而无法理解。这些页面是做什么用的?他们如何重定向到其
我很难处理压缩文件,例如:
问题内容: 我正在寻找一种数学解决方案,该解决方案可以处理真实(长,大,大,风暴)数字。我还没有发现任何东西,但是我不想现在这个问题还没有解决。我正在寻找一种简单的Number解决方案,例如MicrosoftExcelPrecision(30位十进制)或BigInteger(Java)解决方案。当然是用Java语言编写的。 问题答案: BigInt现在是Firefox和Chrome的一部分; 你不
问题内容: 我需要从Sellercentral.amazon.de下载大量的excel文件(估计:500-1000)。手动下载不是一种选择,因为每次下载都需要单击几下,直到Excel弹出。 由于亚马逊无法为我提供具有其结构的简单xml,因此我决定自行进行自动化。首先想到的是Selenium和Firefox。 问题: 必须登录到Sellercentral,以及2要素验证(2FA)。因此,如果我登录一
问题内容: 我正在Spark中将模型实现为python类,并且每次尝试将类方法映射到RDD时,它都会失败。我的实际代码更加复杂,但是这个简化的版本成为了问题的核心: 现在,如果我像这样运行模型(例如): 我收到以下错误: 例外:看来您试图从广播变量,操作或转换中引用SparkContext。SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参见SPA
问题内容: 我有一个来自我的应用程序的时间戳值。用户可以在任何给定的本地TimeZone中。 由于此日期用于假定给定时间始终为格林尼治标准时间的Web服务,因此我需要将用户的参数从(EST)转换为(GMT)。这是一个关键点:用户忽略了自己的TZ。他输入了要发送给WS的创建日期,所以我需要的是: 用户输入: 2008年5月1日下午6:12(美国东部标准时间) WS的参数必须为:2008年5月1日下午