如何在Java 8中使用filter()方法
Java 8 Stream接口引入了filter()方法,該方法可用于根據(jù)特定條件從對象集合中過濾掉某些元素。 應(yīng)將此條件指定為filter()方法接受為參數(shù)的謂詞 。
java.util.function.Predicate接口定義了一個名為test()的抽象方法,該方法接受通用類型T的對象并返回一個布爾值。
讓我們進(jìn)行一些編碼以更清楚地了解過濾器方法。 請看以下菜式。
public class Dish {private String name;private Boolean vegitarian;private Integer calaries;private Type type;public Dish(String name, Boolean vegitarian, Integer calaries, Type type) {super();this.name = name;this.vegitarian = vegitarian;this.calaries = calaries;this.type = type;}public Boolean getVegitarian() {return vegitarian;}public void setVegitarian(Boolean vegitarian) {this.vegitarian = vegitarian;}public Type getType() {return type;}public void setType(Type type) {this.type = type;}public enum Type { MEAT, FISH, OTHER }; }考慮一下,我們只想從所有菜肴列表中過濾掉素食菜肴。 以下是Java 8之前的方法。
List<Dish> vegetarianDishes = new ArrayList<Dish>(); for(Dish d: menu) {if(d.getVegetarian()) { vegetarianDishes.add(d);} }上面的方法稱為外部迭代,我們通過數(shù)據(jù)集合顯式管理迭代。
如何使用Java 8做到這一點? 只需如下一行即可。
List<Dish> menu = .... List<Dish> vegitarianDishes = menu.stream().filter(d -> d.getVegitarian()).collect(Collectors.toList());我們已經(jīng)以Lambda表達(dá)式的形式將Predicate實例傳遞給filter()方法。
另外,我們可以使用Java 8方法引用將謂詞實例傳遞給filter()方法,如下所示。
List<Dish> menu = .... List<Dish> vegitarianDishes = menu.stream().filter(Dish::getVegitarian).collect(Collectors.toList());Dish::getVegitarian是Java 8方法引用的語法。 它指的是Dish類的getVegitarian()方法。
filter()方法返回菜肴流,而collect()方法將流轉(zhuǎn)換為列表。 “收集”操作稱為終端操作。
現(xiàn)在讓我們說,我們要獲取前三個包含300多個卡路里的菜肴。 流支持limit(n)方法,該方法返回另一個不超過給定大小的流。 請求的大小作為參數(shù)傳遞給limit。
List<Dish> menu = .... List<Dish> threeHighCalaricDish = menu.stream().filter(d -> d.getCalaries() > 300).limit(3).collect(Collectors.toList());同樣,如果我們要跳過前3個元素,則流支持skip(n)方法以返回丟棄前n個元素的流。 如果流中的元素少于n個,則返回空流。 注意limit(n)和skip(n)是互補(bǔ)的!
現(xiàn)在,為您做運(yùn)動! 您將如何使用流過濾前兩個肉類菜肴?
List<Dish> menu = .... List<Dish> meatDishes = menu.stream().filter(d -> d.getType() == Dish.Type.MEAT).limit(2).collect(Collectors.toList())翻譯自: https://www.javacodegeeks.com/2018/07/filter-method-java-8.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的如何在Java 8中使用filter()方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大ip是什么意思 大ip的意思
- 下一篇: 家字去掉一点念什么 家字去掉一点是什么字