作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试移植 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()
之前发生了什么方法调用:
Id
过去的node
GraphNode
Set<String>
来自connections
Map
其 key 与检索到的 Id
匹配我不明白这里发生了什么:
.map(this::getNode).collect(Collectors.toSet())
有人可以提供伪代码来解释这一点吗?
最佳答案
这意味着映射
id
到Node
并将其放入(收集)到集合
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))id
,findFirst()
将返回集合中的第一个节点
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/
我是一名优秀的程序员,十分优秀!