List集合过滤学习记录
从一个集合list1中过找到name为list3的参数集合
List<Student> list1 = new ArrayList<>();
list1.add(new Student("name100", "100"));
list1.add(new Student("name102", "102"));
list1.add(new Student("name103", "103"));
list1.add(new Student("name104", "100"));
List<String> list3 = new ArrayList<>();
list3.add("100");
list3.add("102");
List<Student> collect = list1.stream().filter(x -> list3.contains(x.getName())).collect(Collectors.toList());
System.out.println("交集:" + collect);
@Data
class Student {
private String id;
private String name;
}
交集:[Student(id=name100, name=100), Student(id=name102, name=102), Student(id=name104, name=100)]
Stream流中的filter 方法基本使用的代码如:
//创建一个Stream流
Stream<String> stream = Stream.of("张先生", "张三", "张四", "小明", "老王");
//对Stream流中的元素进行过滤,只要姓张的人
Stream<String> stream2 = stream.filter((String name)->{return name.startsWith("张");});
//遍历stream2流
stream2.forEach(name-> System.out.println(name));
/*
Stream流属于管道流,只能被消费(使用)一次
第一个Stream流调用完毕方法,数据就会流转到下一个Stream上
而这时第一个Stream流已经使用完毕,就会关闭了
所以第一个Stream流就不能再调用方法了
IllegalStateException: stream has already been operated upon or closed
*/
//遍历stream流
stream.forEach(name-> System.out.println(name));