我有一个,Map<String,List<String>>
并希望将其变成,Map<String,List<Long>>
因为String
列表中的每个代表一个Long
:
Map<String,List<String>> input = ...;
Map<String,List<Long>> output=
input.entrySet()
.stream()
.collect(toMap(Entry::getKey, e -> e.getValue().stream()
.map(Long::valueOf)
.collect(toList()))
);
我主要的问题是每个人String
可能不能正确代表一个Long
; 可能有一些问题。Long::valueOf
可能会引发例外情况。如果是这种情况,我想返回一个null或空Map<String,List<Long>>
因为我想遍历这张output
地图。但是我不能接受任何错误转换。甚至没有一个。关于如何在不正确的String-> Long转换的情况下如何返回空输出的任何想法?
我同意Naman解决方案,但是不幸的是,在catch块中,我无法检索到字符串->长转换不正确的键(Entry :: getKey)
—
AntonBoarf
这里类似的讨论:字符串到整数-可能坏的数据需要避免出现异常,最终我决定使用regex进行预检查(parseLong文档使用相同的解析规则,并且
—
AjahnCharles
LongStream
如果您打算删除empty
结果,则可能要返回a )
对不起,我误会了。我以为您要返回的单个条目为空/空;但是现在我想你是说整个地图!
—
AjahnCharles
目前尚不清楚主要要点是什么-您想在出现错误的情况下返回一个空的映射,但仍然在控制台出现错误的地方打印“键”吗?我的意思是,有关异常出现的上下文的信息通常在异常中沿调用堆栈传输。无论如何:您专门询问了流,但是我强烈建议您避免嵌套的“收集”调用。后来不得不维护它的人(这很可能会成为您的未来!)会想知道您在这里做了什么。至少介绍一些正确命名的辅助方法。
—
Marco13