部分常用总结
1.Collectors的groupby
Map<Integer, List<String>> userAndScheduleMaps = scheduleStudentPage
.getRecords()
.stream()
.collect(Collectors.groupingBy(CourseScheduleStudentEntity::getCourseScheduleId,
Collectors.mapping(CourseScheduleStudentEntity::getUserId, Collectors.toList())));
2.计算字符串集合,各元素的长度
List<String> words = Arrays.asList("Java 8", "Lambdas", "In", "Action");
List<Integer> wordLengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(wordLengths);
// result :[6, 7, 2, 6]
3.reduce规约
计算求和
方式一:
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
方式二
int sum = numbers.stream().reduce(0, Integer::sum);
4.最大值最小值
最大值方式一:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers
.stream()
.reduce(0,Integer::max);
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
OptionalInt sum = Arrays.asList(employee,employee1,employee2)
.stream()
.mapToInt(Employee::getAge)
.max();
System.out.println(sum.getAsInt()); //20
最小值方式一:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers
.stream()
.reduce(0,Integer::min);
5.求和
Employee employee = new Employee(15, "18801171255", "man", 888888888);
int sum = Arrays.asList(employee)
.stream()
.mapToInt(Employee::getAge)
.sum();
System.out.println(sum); // 15
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers
.stream()
.reduce(0,Integer::sum);
System.out.println(sum); // 15
int[] numbers = {2, 3, 5, 7, 11, 13};
int sum = Arrays.stream(numbers).sum();
System.out.println(sum); // 41
6.计算流中元素的个数
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Long sum = Arrays.asList(employee,employee1,employee2)
.stream()
.count();
System.out.println(sum); // 3
7.排序
// 对年龄排序
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
List<Integer> ageRanking = Arrays.asList(employee,employee1,employee2)
.stream()
.sorted(Comparator.comparing(Employee::getAge))
.map(item->item.getAge())
.collect(Collectors.toList());
System.out.println(ageRanking); // [15, 18, 20]
8.去重
// 对电话号码去重
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
List<String> phoneNumber = Arrays.asList(employee,employee1,employee2)
.stream()
.map(item->item.getPhone())
.distinct()
.collect(Collectors.toList());
System.out.println(phoneNumber); // [18801171255]
9.拼接
// 对性别拼接
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
String sex = Arrays.asList(employee, employee1, employee2)
.stream()
.map(item -> item.getSex())
.collect(Collectors.joining());
System.out.println(sex); // manmanman
10.转化为大写
Stream<String> stream = Stream.of("Java 8 ", "Lambdas ", "In ", "Action");
stream.map(String::toUpperCase).forEach(System.out::println);
// JAVA 8
// LAMBDAS
// IN
// ACTION
11.Collectors ->groupingBy
import java.util.stream.Collectors;
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Map<String, List<Employee>> sex = Arrays.asList(employee, employee1, employee2)
.stream()
.collect(Collectors.groupingBy(Employee::getSex));
System.out.println(sex);
//{woman=[Employee{age=18, phone='18801171255', sex='woman', salary=888888888}], man=[Employee{age=15, phone='18801171255', sex='man', salary=888888888}, Employee{age=20, phone='18801171255', sex='man', salary=888888888}]}
12 .求最大值对象返回Optional
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Optional<Employee> max = Arrays.asList(employee, employee1, employee2)
.stream()
.collect(Collectors.maxBy(Comparator.comparingInt(Employee::getAge)));
System.out.println(max);
// Optional[Employee{age=20, phone='18801171255', sex='man', salary=888888888}]
13.Collectors求和
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
int sum = Arrays.asList(employee, employee1, employee2)
.stream()
.collect(Collectors.summingInt(Employee::getAge));
System.out.println(sum);