新建一个Student类:
public class Student {
private Integer id;
private String name;
private Integer age;
//省略set,get
}
测试:
map()
public void Test(){
Student student1 = new Student(1,"aa",4);
Student student2 = new Student(2,"bb",3);
Student student3 = new Student(3,"cc",2);
Student student4 = new Student(4,"dd",1);
List<Student> students = new ArrayList<>();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
//获取姓名集合
List<String> list = students.stream().map(student -> student.getName()).collect(Collectors.toList());
list.forEach(System.out::println);
}
结果:
aa
bb
cc
dd
filter()
//过滤age大于2的学生的列表
List<Student> list = students.stream().filter(student -> student.getAge() > 2).collect(Collectors.toList());
list.forEach(System.out::println);
结果:
Student{id=1, name='aa', age=4}
Student{id=2, name='bb', age=3}
distinct()
List<String> arrs = Arrays.asList("444", "222", "333", "222");
//去重
List<String> list = arrs.stream().distinct().collect(Collectors.toList());
list.forEach(System.out::println);
结果:
444
222
333
sorted()
List<String> arrs = Arrays.asList("444", "222", "333", "222");
//排序
List<String> list = arrs.stream().sorted().collect(Collectors.toList());
list.forEach(System.out::println);
结果:
222
222
333
444
对student排序
//根据age排序
List<Student> list = students.stream()
.sorted((stu1, stu2) -> Integer.compare(stu1.getAge(),stu2.getAge())).collect(Collectors.toList());
list.forEach(System.out::println);
结果:
Student{id=4, name='dd', age=1}
Student{id=3, name='cc', age=2}
Student{id=2, name='bb', age=3}
Student{id=1, name='aa', age=4}
limit()
//截取列表中前两个对象
List<Student> list = students.stream().limit(2).collect(Collectors.toList());
list.forEach(System.out::println);
结果:
Student{id=1, name='aa', age=4}
Student{id=2, name='bb', age=3}
skip()
List<String> arrs = Arrays.asList("444", "222", "333", "222");
//删除前三个字符串,对arrs没有影响
List<String> list = arrs.stream().skip(3).collect(Collectors.toList());
list.forEach(System.out::println);
结果:
222
reduce()
List<String> arrs = Arrays.asList("444", "222", "333", "222");
//将字符串“aaa”与arrs中的字符串聚合,返回新的字符串
String aaa = arrs.stream().reduce("aaa", (a, b) -> a + b);
System.out.println(aaa);
结果:
aaa444222333222
min()
//获取id最小的student对象
Student student = students.stream()
.min((stu1, stu2) -> Integer.compare(stu1.getId(), stu2.getId())).get();
System.out.println(student);
结果:
Student{id=1, name='aa', age=4}
allMatch() / anyMatch() / noneMatch()
//所有对象都满足条件才返回true
boolean allMatch = students.stream().allMatch(student -> student.getId() > 2);
if (allMatch) {
System.out.println("所有id都大于二");
}
//只要有满足条件的就返回true
boolean anyMatch = students.stream().anyMatch(student -> student.getId() > 2);
if (anyMatch) {
System.out.println("有id大于二");
}
//若没有满足条件的,返回true
boolean noneMatch = students.stream().noneMatch(student -> student.getName().equals("eee"));
if (noneMatch) {
System.out.println("没有叫eee的人");
}
结果:
有id大于二
没有叫eee的人
tomap()
//以id为Key,对象为value
Map<Integer, Student> map = students.stream().collect(Collectors.toMap(Student::getId, a -> a));
System.out.println(map);
结果:
{1=Student{id=1, name='aa', age=4}, 2=Student{id=2, name='bb', age=3}, 3=Student{id=3, name='cc', age=2}, 4=Student{id=4, name='dd', age=1}}