Эффективный способ итеративной коллекции Java и некоторые преобразования элемента

0

Мне интересно, есть ли эффективные способы итерации коллекции объектов 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 ..
   }
}

Лично мне не нравится этот способ, показанный в основном методе, поскольку для этого требуется больше кода ввода, а код не такой чистый... Я предпочитаю способ, используемый в C++ (только одна строка кода). Пример выше:

 for_each(obj.begin(), obj.end(), a fun object);  
  • 0
    Мне любопытно, что по этому поводу вы считаете "не очень чистым". Тот факт, что код находится в одной строке, не делает его «чище».
Теги:
iterator
collections

1 ответ

0
Лучший ответ

В Java 8 вы можете:

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

Трудно представить что-то гораздо более краткие, чем это (по крайней мере, будучи читабельным!). Вот что он делает более подробно:

  • Первая строка создает Stream<MyObject> для вашего Set<MyObject>
  • Вторая строка превращает это в поток, который допускает только элементы o такие, что o.hasData() && other conditions.
    • Это соответствует if в вашем цикле.
  • Наконец, третья строка вызывает метод run.
    • (MyObject::run - это только сокращение для o → o.run(), где o имеет тип MyObject.)
  • 0
    Любая идея для Java7?
  • 0
    Для Java 7 и ниже, то, что у вас есть, примерно так же хорошо, как и получается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню