2016-01-21 2 views
2

Я привык к C# и лямбда-выражениям, но я не смог отфильтровать список java на основе определенных критериев.Как сделать фильтр в Java8?

Ex:

List<MyObject> list; 

Мне нужно, чтобы получить все MyObject, которые имеют isMyFlag() верно.

В C# очень просто использовать IEnumerable ... Есть ли похожие на IEnumerable в Java?

+0

ну, Java8 поставляется с Лямбда-выражениями. Вы проверили их? – Stultuske

ответ

8

Смотрите в Java 8 новый Stream API

Вам нужно сделать фильтр, а затем собирать результаты в списке с помощью потока API:

list.stream().filter(x -> x.isMyFlag()).collect(Collectors.toList()); 
+2

Вы также можете использовать ссылку на методе вместо выражения lambda: '.filter (x :: isMyFlag)' – Prim

4

С лямбды вы можете сделать следующее:

List<MyObject> filteredList = list.stream().filter(myObj -> myObj.isMyFlag()) 
              .collect(Collectors.toList()); 
0

Для использования Stream API вам необходимо вызвать метод stream(). Возможно, это сюрприз от C#, так как вам не нужно это делать, но как только вы преодолеете это препятствие, это будет почти то же самое.

List<MyObject> list2 = list.stream() 
          .filter(m -> m.isMyFlag()) 
          .collect(Collectors.toList()); 
+3

'list' не является методом' Stream '. 'collect' - это тот, о котором вы думаете. – Smallhacker

Смежные вопросы