filter方法在stream中起到过滤的作用,可以链式操作,不是terminal操作。
Predicate是一个接口,接口方法是test(),返回boolean值.
Predicate常和stream的filter配合使用,实现过滤。
可以多条件组合过滤,如代码:

public static void main(String[] args) {
List<String> names = Arrays.asList("张三丰", "张翠山", "张无忌","金毛狮王","赵敏");

// 张开头的
Predicate<String> zhang=(n)->n.startsWith("张"); //
// 含三丰的
Predicate<String> sanfeng=(n)->n.contains("三丰");
// 王结尾的
Predicate<String> wang=(n)->n.endsWith("王");
sanfeng.equals("金毛");

//Predicate常和stream的filter配合使用,实现过滤
//和filter结合用 默认调用的是test()方法 姓张的
names.stream().filter(zhang).forEach(n-> System.out.println(n));

//and() 姓张的,含三丰的
names.stream().filter(zhang.and(sanfeng)).forEach(n-> System.out.println(n));

//or() 张开头的,或者 王结尾的
names.stream().filter(zhang.or(wang)).forEach(n-> System.out.println(n));

//negate() 不是张开头的,但是王结尾的
names.stream().filter(zhang.negate().and(wang)).forEach(n-> System.out.println(n));

// equals() 方法还没懂什么意思
}