英文:
Iterate over a map with values as List in java 8
问题
在Java 8中,可以使用流(streams)来更优雅地执行此操作:
List<KeyPair> keyPairs = map.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.map(value -> new KeyPair()
.withHashKey(value)
.withRangeKey(entry.getKey())))
.collect(Collectors.toList());
这将会迭代Map<Integer, List<String>>
并将其转换为List<KeyPair>
,更符合Java 8的函数式编程风格。
英文:
Iterate over a Map<Integer, List<String>>
and convert to type List<KeyPair>
. Any better way to do it in java 8 (Using streams).
Naive way:
final List<KeyPair> keyPairs = Lists.newArrayList();
for (final Map.Entry<Integer, List<String>> entry : map.entrySet()) {
for (final String value : entry.getValue()) {
keyPairs.add(new KeyPair()
.withHashKey(value)
.withRangeKey(entry.getKey()));
}
}
答案1
得分: 5
首先,迭代地遍历地图的 entrySet,然后您可以使用 flatMap
处理地图键的值列表,并创建 KeyPair
,其中包括 entry 键和列表中的每个值,并将其收集为列表。
List<KeyPair> keyPairs = map.entrySet()
.stream()
.flatMap(entry -> entry.getValue()
.stream()
.map(value -> new KeyPair()
.withHashKey(value)
.withRangeKey(entry.getKey())))
.collect(Collectors.toList());
英文:
First, iterate over the map entrySet and then you can use flatMap
for list of value for the map key and create KeyPair
with entry key and every value of list and collect as a list.
List<KeyPair> keyPairs = map.entrySet()
.stream()
.flatMap(entry -> entry.getValue()
.stream()
.map(value -> new KeyPair()
.withHashKey(value)
.withRangeKey(entry.getKey())))
.collect(Collectors.toList());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论