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

ele*_*ect 5 java java-8 java-stream

我对流很陌生。

我想流式传输数组列表geometries EC_Geometry,如果EC_Geometry元素不存在(或者最好equals永远不返回true),那么我添加它。

public void init(GL3 gl3, EC_Mesh mesh) {

    geometries.stream()
            .filter(geometry -> mesh.getGeometry().equals(geometry))
            .findAny()
            .orElse(..?);
}
Run Code Online (Sandbox Code Playgroud)

但我被困在最后一行

如何使用流解决它?

请注意,这equals是我编写的一种检查几何形状是否相同的方法(即:三角形是否对应)

Ola*_*nka 5

orElse即使未使用返回的值,也将始终运行,因此最好orElseGet在此处使用,只有在未找到任何内容时才会运行。

 geometries.stream()
            .filter(geometry -> mesh.getGeometry().equals(geometry))
            .findAny()
            .orElseGet(() -> {
                geometries.add(mesh.getGeometry());
                return mesh.getGeometry();
            });
Run Code Online (Sandbox Code Playgroud)

  • `.filter(mesh.getGeometry()::equals)` 避免为每个流元素调用 `getGeometry()`... (3认同)