循环集合的几种方式前言
List<Apple> inventory = appleData (); //创造数据方法
方式一 : 使用引用::语法
Apple实体类 :
@Data
@ToString
public class Apple {
private String color;
private Integer weight;
private Integer id;
public static boolean isGreenApple(Apple apple) {
return "green".equals(apple.getColor());
}
public static boolean isHeavyApple(Apple apple) {
return apple.getWeight() > 150;
}
}
谓词接口类 , 实现类 :
public interface Predicate<T>{
boolean test(T t);
}
@Service("predicateImpl")
public class PredicateImpl<T> implements Predicate<T> {
@Override
public boolean test(Object o) {
return false;
}
}
调用方法类 :
static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {
List<Apple> result = new ArrayList<>();
for (Apple apple: inventory){
if (p.test(apple)) {
result.add(apple);
}
}
return result;
}
测试类 :
public static void main(String[] args) {
List<Apple> result = filterApples(inventory,Apple::isGreenApple);
}
方式二 : 使用匿名函数或Lambda
List<Apple> result = filterApples(inventory, (Apple a) -> "green".equals(a.getColor()) )
方式三 : 使用流顺序处理
List<Apple> result = inventory.stream().filter((Apple a) -> a.getWeight() < 150).collect(Collectors.toList());
方式四 : 使用流并行处理
List<Apple> result = inventory.parallelStream().filter((Apple a) -> a.getWeight() < 150).collect(Collectors.toList());