迭代 Java 集合和对元素进行一些转换的有效方法

Efficient way to iterative Java Collection and doing some transformation on element

本文关键字:转换 方法 有效 集合 Java 元素 迭代      更新时间:2023-10-16

我想知道是否有一些有效的方法来迭代对象的 java 集合并进行一些转换。这是我经常看到的一个例子:

 public class MyObject {
    int data;
    public void run() {
        doTransform();
    }
    .....
}
public class Main {
    public static void main(){
        Set<MyObject> objs=..
        for(MyObject obj: objs){
            if(obj.getData() && other conditions ){
               obj.run();                
           }
       }
       //The iterator are also frequently used here ..
   }
}

就个人而言,我不喜欢 main 方法中显示的这种方式,因为它需要更多的键入代码并且代码不是那么干净......我更喜欢C++中使用的方式(只有一行代码)。上述示例为:

 for_each(obj.begin(), obj.end(), a fun object);  

在Java 8中,你可以做到:

objs.stream()
    .filter(o -> o.hasData() && other conditions)
    .forEach(MyObject::run);

很难想象比这更简洁的东西(至少在仍然可读的情况下!以下是它更深入的功能:

  • 第一行为您的Set<MyObject>创建一个Stream<MyObject>
  • 第二行它将其转换为仅允许元素o的流,以便 o.hasData() && other conditions .
    • 这与循环中的if相对应。
  • 最后,第三行调用 run 方法。
    • MyObject::run只是o -> o.run()的简写,其中oMyObject类型。