filter方法(谓词筛选)
该操作会接受一个谓词(一个返回boolean的函数),并返回所有符合谓词元素的流
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dish {
private String name;
private boolean vegetarian;
private int calories;
private Type type;
public enum Type { MEAT, FISH, OTHER }
}
public class DistTest {
public static void main(String[]args){
List<Dish> menu =
asList( new Dish("pork", false, 800, Dish.Type.MEAT),
new Dish("beef", false, 700, Dish.Type.MEAT),
new Dish("chicken", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("season fruit", true, 120, Dish.Type.OTHER),
new Dish("pizza", true, 550, Dish.Type.OTHER),
new Dish("prawns", false, 400, Dish.Type.FISH),
new Dish("salmon", false, 450, Dish.Type.FISH));
List<Dish> vegetarianDish = menu.stream()
.filter(Dish::isVegetarian)
.collect(Collectors.toList());
}
}
filter(Dish:: isVegetarian)来检查是否适合素食者。
List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream()
.filter(i -> i % 2 == 0)
.distinct()
.forEach(System.out::println);
还有在遍历过程中需要获取符合条件的元素,也可以使用filter‘()方法。