2016-01-21 70 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