10, "2-3" -> 20 并希望将其转换为 Li-6ren">
gpt4 book ai didi

java - 我可以使用 Stream 将一个元素映射到多个元素吗?

转载 作者:行者123 更新时间:2023-12-01 19:57:06 26 4
gpt4 key购买 nike

是否可以使用 Java Streams 将一个集合映射到另一个集合,但第二个集合必须具有与第一个集合不同的元素计数?

我有 map

"1" -> 10, "2-3" -> 20

并希望将其转换为

List<Node> = Node(1,10), Node(2,20), Node(3,20)

如何使用流来做到这一点?

我的代码是:

import com.google.common.collect.ImmutableMap;

import java.util.*;

import static java.util.stream.Collectors.toList;

public class MapOneToManyQuestion {

public static void main(String[] args) {
new MapOneToManyQuestion().run();
}

void run() {
final Map<String, Integer> map = ImmutableMap.of("1", 10, "2-3", 20);

List<Node> nodes = map.entrySet().stream().map(entry -> {
if (Objects.equals(entry.getKey(), "1")) {
return new Node(1, entry.getValue());
} else {
//return new Node(2, entry.getValue());
//return new Node(3, entry.getValue());
}
}).collect(toList());
}

class Node {
private Integer key;
private Integer value;

public Node(Integer key, Integer value) {
this.key = key;
this.value = value;
}

public Integer key() {
return this.key;
}

public Integer value() {
return this.value;
}
}
}

最佳答案

您可以使用 flatMap 为此

List<Node> nodes = map.entrySet()
.stream()
.flatMap(entry -> {
String key = entry.getKey();
Integer value = entry.getValue();
return Arrays.stream(key.split("-"))
.map(splitKey -> new Node(Integer.valueOf(splitKey), value));
})
.collect(Collectors.toList());

它流过每个映射元素,并按 - 分割键,并为分割产生的每个关键部分创建一个 Node 对象以及该条目的映射值最后它被收集到一个列表中。

关于java - 我可以使用 Stream 将一个元素映射到多个元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49260561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com