2016-01-21 64 views
2

我习惯于C#和lambda表达式,但是我不能根据某些标准过滤一个java列表。如何在Java8中过滤列表?

例:

List<MyObject> list; 

我需要得到所有有isMyFlag()真为MyObject。

在C#中真的很容易使用IEnumerable ...有没有类似于Java中的IEnumerable?

+0

好吧,Java8带有可用的Lambda表达式。你检查过那些吗? – Stultuske

回答

8

见的Java 8中的新Stream API

你需要做一个过滤器,然后使用Stream API收集在一个列表中的结果:

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

您也可以使用methode引用来代替lambda表达式:'.filter(x :: isMyFlag)' – Prim

4

随着lambda表达式,你可以做到以下几点:

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