Java,搜索元素,如果没有找到,添加它

时间:2016-06-17 08:56:21

标签: java java-8 java-stream

我对溪流很陌生。

我想流式传输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是我编写的方法,检查几何是否相同(即:如果三角形对应)

2 个答案:

答案 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。