public interface fruitsFilter {
Boolean filter(Fruits fruits, String colour, double weight);
}
public static List<Fruits> findFruits(List<Fruits> fruitsList, fruitsFilter fruitsFilter, String colour, double weight) {
List<Fruits> fruitsArrayList = new ArrayList<>();
fruitsList.stream().filter(f -> fruitsFilter.filter(f, colour, weight)).forEach(fruits -> {
fruitsArrayList.add(fruits);
});
return fruitsArrayList;
}
public static class sameColourAndWeightGreater implements fruitsFilter {
/**
* 颜色相同重量高于参数的水果
*
* @param fruits
* @param colour
* @param weight
* @return
*/
@Override
public Boolean filter(Fruits fruits, String colour, double weight) {
return (fruits.getColour().equals(colour) && fruits.getWeight() > weight);
}
}
public static class sameColourAndWeightUnderOrEqual implements fruitsFilter {
/**
* 颜色相同重量小于等于参数的水果
*
* @param fruits
* @param colour
* @param weight
* @return
*/
@Override
public Boolean filter(Fruits fruits, String colour, double weight) {
return (fruits.getColour().equals(colour) && fruits.getWeight() <= weight);
}
}
/*策略模式*/
public static void main(String[] args) {
List<Fruits> fruitsList = Arrays.asList(new Fruits("red", 17), new Fruits("black", 18), new Fruits("black", 20), new Fruits("yellow", 10));
String colour = "black";
double weight = 18;
/*普通循环*/
List<Fruits> black = Demand.findFuits(fruitsList, "black");
System.out.println(black);
/*策略模式*/
List<Fruits> fruitsGreater = findFruits(fruitsList, new sameColourAndWeightGreater(), colour, weight);
List<Fruits> fruitsUnder = findFruits(fruitsList, new sameColourAndWeightUnderOrEqual(), colour, weight);
System.out.println(fruitsGreater);
System.out.println(fruitsUnder);
/*lambda方式*/
List<Fruits> fruitsList1 = findFruits(fruitsList, (fruits, colour1, weight1) -> {
return fruits.getColour().equals(colour) && fruits.getWeight() > weight;
}, colour, weight);
System.out.println(fruitsList1);
}
根据一个简单的策略模式,初识lambda表达式中的stream流
最新推荐文章于 2022-05-16 12:55:03 发布