1. 程式人生 > >java8實戰:filter的簡單使用

java8實戰:filter的簡單使用

《JAVA8實戰》中的例子

要實現的功能:通過Apple的color或weight屬性,對List<Apple>進行篩選。

1、首先定義com.owl.entity.Apple:

package com.owl.entity;

public
class Apple { private String color; private Integer weight; public String getColor() { return color; } public void setColor(String color) {
this.color = color; } public Integer getWeight() { return weight; } public void setWeight(Integer weight) { this.weight = weight; } }

 

2、生成一個簡單的List<Apple>集合

package com.owl.app;

import java.util.ArrayList;
import java.util.List;

import com.owl.entity.Apple;

public class demo { public static void main(String[] args) { List<Apple> appleList = new ArrayList<Apple>(); Apple redApple = new Apple(); redApple.setColor("red"); redApple.setWeight(180); appleList.add(redApple); Apple greenApple
= new Apple(); greenApple.setColor("green"); greenApple.setWeight(120); appleList.add(greenApple); } }

3、在com.owl.entity.Apple中定義篩選條件(綠蘋果或者重量大於150的蘋果)

    public static boolean isGreenApple(Apple apple) {
        return "green".equals(apple.getColor());
    }

    public static boolean isHeavyApple(Apple apple) {
        return apple.getWeight() > 150;
    }

4、在com.owl.app.demo中定義介面:

    public interface Predicate<T> {
        boolean test(T t);
    }

5、在com.owl.app.demo中定義filter方法:

    static List<Apple> AppleFilter(List<Apple> apples, Predicate<Apple> p) {
        List<Apple> resultApples = new ArrayList<Apple>();
        for (Apple apple:apples) {
            if(p.test(apple)) {
                resultApples.add(apple);
            }
        }
        return resultApples;
    }

6、在main函式中使用filter篩選蘋果

List<Apple> greenAppleSet = AppleFilter(appleList, Apple::isGreenApple);
List<Apple> heavyAppleSet = AppleFilter(appleList, Apple::isHeavyApple);
        
System.out.println("=======綠蘋果=======");
for (Apple apple:greenAppleSet) {
     System.out.println(apple.getColor());
}
        
System.out.println("=======大蘋果=======");
for (Apple apple:heavyAppleSet) {
     System.out.println(apple.getWeight());
}

 

結果:

 

為了實現上述功能,除了需要定義篩選條件之外,仍需要定義Predicate<T>和AppleFilter方法未免太過麻煩,通過lambda表示式有更簡單的寫法:

List<Apple> greenAppleSet = appleList.stream().filter((Apple apple)->apple.getColor().equals("green")).collect(Collectors.toList());
List<Apple> heavyAppleSet = appleList.stream().filter((Apple apple)->apple.getWeight()>150).collect(Collectors.toList());

System.out.println("=======綠蘋果=======");
for (Apple apple:greenAppleSet) {
System.out.println(apple.getColor());
}

System.out.println("=======大蘋果=======");
for (Apple apple:heavyAppleSet) {
System.out.println(apple.getWeight());
}