我对溪流很陌生。
我想流式传输geometries
EC_Geometry
arraylist,如果EC_Geometry
元素不存在(或更好equals
永远不会返回true
),那么我添加它。
public void init(GL3 gl3, EC_Mesh mesh) {
geometries.stream()
.filter(geometry -> mesh.getGeometry().equals(geometry))
.findAny()
.orElse(..?);
}
但我被困在最后一行
如何使用流解决它?
请注意equals
是我编写的方法,检查几何是否相同(即:如果三角形对应)
答案 0 :(得分:4)
orElse
将始终运行,即使未使用返回的值,因此最好在此处使用orElseGet
,只有在找不到任何内容时才会运行。
geometries.stream()
.filter(geometry -> mesh.getGeometry().equals(geometry))
.findAny()
.orElseGet(() -> {
geometries.add(mesh.getGeometry());
return mesh.getGeometry();
});
答案 1 :(得分:2)
.findAny().orElse(..?);
是可选的 - 如果你想找到第一个元素。
对于您希望实现的目标,最好的方法就是:
meshG = mesh.getGeometry();
if (!geometries.contains(meshG)) {
geometries.add(meshG);
}
无需过度使用Stream API。