gpt4 book ai didi

Java8 将 [List, String] 转换为 Map
转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:20 25 4
gpt4 key购买 nike

我有一个 List<Computer> .每台计算机都有一个 CPU 列表和一个主机名。所以,假设我有:

List<Computer> computers

我可以打电话

List<CPU> CPUs = computer.getCPUs();

我可以打电话

String hostname = computer.getHostName();

我想要做的是,使用 Streams,获取一个包含 CPU 作为键和主机名作为字符串的映射。相同计算机内的相同 CPU 将复制主机名。

我该怎么做?

Java8 之前的代码是这样的:

public Map<CPU, String> getMapping(List<Computer> computers) {
Map<CPU, String> result = new HashMap<>();
for (Computer computer : computers) {
for (CPU cpu : computer.getCPUs()) {
result.put(cpu, computer.getHostname());
}
}

return result;
}

最佳答案

如果您的 CPU类有一个反向引用它是 Computer例如,那么你可以很容易地做到这一点。首先流过所有计算机,并用 getCPUs 进行平面映射。 , 这会给你一个 Stream<CPU>所有 CPU。然后你可以使用Collectors.toMap收集到 Map<CPU, String>使用 Function.identity对于 key 和 lambda,首先提取 Computer然后是来自 CPU 的主机名作为值。在代码中:

computers.stream()
.flatMap(computer -> computer.getCPUs().stream())
.collect(Collectors.toMap(Function.identity(), cpu -> cpu.getComputer().getHostname()));

关于Java8 将 [List<Object>, String] 转换为 Map<Object, String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639933/

25 4 0