1、filter(arg) 筛选出来arg为true的组成新的集合
List<String> list = Arrays.asList("name", "name1", "name2", "a");
List<String> list1 = list.stream().filter(nl -> nl.contains("name")).collect(Collectors.toList());
System.out.println("list1:" + list1.toString());
输出结果
list1:[name, name1, name2]
2、findFirst 返回第一个匹配的
// findFirst 返回第一个匹配的,结合orElse,如果没有符合条件的就返回null
String result1 = list.stream().filter(nl -> nl.equals("name")).findFirst().orElse(null);
System.out.println("result1:" + result1);
输出结果
result1:name
3、toMap 集合转换为map,以student的某个字段为key,当前student为value
List<Student> students = new ArrayList<>();
students.add(new Student(1,"zhangsan"));
students.add(new Student(2,"lisi"));
// toMap 集合转换为map,以student的某个字段为key,当前student为value
Map<Integer, Student> map1 = students.stream().collect(Collectors.toMap(Student::getStuNumber, Function.identity()));
map1.keySet().forEach(nl->{
System.out.println(nl+":"+map1.get(nl).toString());
});
输出结果
1:stuName:zhangsan,stuNumber:1
2:stuName:lisi,stuNumber:2
4、mapToInt 获取student stuNumber字段
students.stream().mapToInt(Student::getStuNumber).forEach(System.out::println);
输出结果
1
2
5、groupingBy 通过某个字段分组输出map,key为分组标识,value为匹配当前标识的集合
students = new ArrayList<>();
students.add(new Student(1,"zhangsan"));
students.add(new Student(2,"lisi"));
students.add(new Student(2,"lisiBro"));
// groupingBy 通过某个字段分组输出map,key为分组标识,value为匹配当前标识的集合
Map<Integer, List<Student>> collectStu = students.stream().collect(Collectors.groupingBy(Student::getStuNumber));
collectStu.keySet().forEach(nl -> {
System.out.println("key:"+nl+","+collectStu.get(nl).toString());
});
输出结果
key:1,[stuName:zhangsan,stuNumber:1]
key:2,[stuName:lisi,stuNumber:2, stuName:lisiBro,stuNumber:2]
定义Student类
public static class Student{
int stuNumber;
String stuName;
Student(int stuNumber,String stuName){
this.stuName = stuName;
this.stuNumber = stuNumber;
}
public String getStuName() {
return stuName;
}
public int getStuNumber() {
return stuNumber;
}
public String toString() {
return "stuName:"+ this.stuName+",stuNumber:"+this.getStuNumber();
}
}