gpt4 book ai didi

java - 有人可以将这个非常简洁的 Java 函数解压成一个更详细的示例吗?

转载 作者:行者123 更新时间:2023-12-01 17:41:23 26 4
gpt4 key购买 nike

我正在尝试移植 this Java tutorial到乔乔。我正在努力打开 Set 的包装下面的函数,因为虽然简短而优雅,但它将大量转换塞进一个小空间,我不确定我是否正确理解它。这很困难,因为 Java 不是我的主要语言,而且 Xojo 缺乏对泛型的支持:

public interface GraphNode {
String getId();
}


public class Graph<T extends GraphNode> {
private final Set<T> nodes;
private final Map<String, Set<String>> connections;

public T getNode(String id) {
return nodes.stream()
.filter(node -> node.getId().equals(id))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("No node found with ID"));
}

public Set<T> getConnections(T node) {
return connections.get(node.getId()).stream()
.map(this::getNode)
.collect(Collectors.toSet());
}
}

我基本上只能弄清楚 .stream() 之前发生了什么方法调用:

  1. 获取Id过去的node GraphNode
  2. 获取Set<String>来自connections Map其 key 与检索到的 Id 匹配

我不明白这里发生了什么:

.map(this::getNode).collect(Collectors.toSet())

有人可以提供伪代码来解释这一点吗?

最佳答案

这意味着映射idNode并将其放入(收集)到集合

this::getNode 翻译为:从此类中,在 id 上使用 getNode,这只是 .map(id -> getNode( id)).collect(Collectors.toSet())

public T getNode(String id) {
return nodes.stream()
.filter(node -> node.getId().equals(id))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("No node found with ID"));
}

此代码返回节点集合中具有 id 的第一个节点,nodes.stream()
.filter(node -> node.getId().equals(id))
将返回一个集合,其中每个节点都有作为参数传递的 idfindFirst() 将返回集合中的第一个节点

public Set<T> getConnections(T node) {
return connections.get(node.getId()).stream()
.map(this::getNode)
.collect(Collectors.toSet());
}

由于 connections 是一个映射,connections.get(node.getId()) 将返回带有键 node.getId() 的值code>,然后 map(this::getNode) 使用 getNode(String id) 将其从 id 映射到 Node >,最后放入集合

关于java - 有人可以将这个非常简洁的 Java 函数解压成一个更详细的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60685923/

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