我習慣於C#和lambda表達式,但是我不能根據某些標準過濾一個java列表。如何在Java8中過濾列表?
例:
List<MyObject> list;
我需要得到所有有isMyFlag()真爲MyObject。
在C#中真的很容易使用IEnumerable ...有沒有類似於Java中的IEnumerable?
我習慣於C#和lambda表達式,但是我不能根據某些標準過濾一個java列表。如何在Java8中過濾列表?
例:
List<MyObject> list;
我需要得到所有有isMyFlag()真爲MyObject。
在C#中真的很容易使用IEnumerable ...有沒有類似於Java中的IEnumerable?
見的Java 8中的新Stream API
你需要做一個過濾器,然後使用Stream API收集在一個列表中的結果:
list.stream().filter(x -> x.isMyFlag()).collect(Collectors.toList());
您也可以使用methode引用來代替lambda表達式:'.filter(x :: isMyFlag)' – Prim
隨着lambda表達式,你可以做到以下幾點:
List<MyObject> filteredList = list.stream().filter(myObj -> myObj.isMyFlag())
.collect(Collectors.toList());
要使用Stream API,您需要調用stream()方法。這可能是來自C#的一個驚喜,因爲你不需要這樣做,但是一旦你克服了這個障礙,它應該大致相同。
List<MyObject> list2 = list.stream()
.filter(m -> m.isMyFlag())
.collect(Collectors.toList());
'list'不是'Stream
好吧,Java8帶有可用的Lambda表達式。你檢查過那些嗎? – Stultuske