The following summarizes a few commonly used new features
/*filter filtering (T-> boolean)*/
List newlist = list.stream().filter(user -> user.getAge() > 20) .collect(Collectors.toList());
/*distinct deduplication*/
List newlist = list.stream().distinct().collect(Collectors.toList());
/* sorted sorting */
List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).collect(Collectors.toList());
/*limit returns the first n elements*/
List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).limit(2).collect(Collectors.toList());
/*skip removes the first n elements*/
List newlist = list.stream() .sorted(Comparator.comparingInt(User::getAge)).skip(2).collect(Collectors.toList());
/*map(T->R)*/
List newlist = list.stream() .map(User::getName).distinct().collect(Collectors.toList());
/*allMatch(T->boolean)
Check if all the parameter behaviors are satisfied */
boolean flag = list.stream().allMatch(user -> user.getAge() >= 10);
/*anyMatch(T->boolean)
Check if any element satisfies the given condition */
boolean flag = list.stream() .anyMatch(user -> user.getAge() == 10);
/*noneMatchT->boolean)
Whether there is an element in the stream that matches the given T -> boolean condition */
boolean flag = list.stream() .noneMatch(user -> user.getName().contains("张三李四"));
/*findFirst( ): find the first element*/
Optional optionalUser = list.stream() .sorted(Comparator.comparingInt(User::getAge)) .findFirst();
/*count() calculates the total*/
long count = list.stream().count();
/*maximum value minimum value*/
Optional max = list.stream() .collect( Collectors.maxBy( Comparator.comparing(User::getAge) ) );
Optional min = list.stream() .collect( Collectors.minBy( Comparator.comparing(User::getAge) ) );
/* sum_average */
int totalAge = list.stream() .collect(Collectors.summingInt(User::getAge));
double avgAge = list.stream() .collect(Collectors.averagingInt(User::getAge));
/*Get the number, sum, maximum value, and minimum value of elements at one time*/
IntSummaryStatistics statistics = list.stream() .collect(Collectors.summarizingInt(User::getAge));
/*Stitching*/
String names = list.stream() .map(User::getName) .collect(Collectors.joining(", "));
/*group*/
Map> map1 = users().stream() .collect(Collectors.groupingBy(User::getName));
Map>> map2 = users().stream() .collect(Collectors.groupingBy(User::getName, Collectors.groupingBy(User::getAge)));
/* Group total */
Map num = users().stream() .collect(Collectors.groupingBy(User::getName, Collectors.counting()));
Map num2 = users().stream() .filter(user -> user.getAge() >= 18) .collect(Collectors.groupingBy(User::getName, Collectors.counting()));
/*partition*/
Map> part = list.stream() .collect(Collectors.partitioningBy(user -> user.getAge()
package com.baobei.ademo;
import com.google.gson.Gson;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Chenyf
* @date 2022/3/31 10:59
*/
public class Demo {
public static void main(String[] args) {
partitioningBy();
}
/*分区*/
public static void partitioningBy() {
List<User> list = users();
Map<Boolean, List<User>> part = list.stream()
.collect(Collectors.partitioningBy(user -> user.getAge() <= 20));
System.out.println(new Gson().toJson(part));
}
/*分组合计*/
public static void groupCount() {
Map<String, Long> num = users().stream()
.collect(Collectors.groupingBy(User::getName, Collectors.counting()));
System.out.println(num);
Map<String, Long> num2 = users().stream()
.filter(user -> user.getAge() >= 18)
.collect(Collectors.groupingBy(User::getName, Collectors.counting()));
System.out.println(num2);
}
/*分组*/
public static void group() {
Map<Integer, List<User>> map = users().stream()
.collect(Collectors.groupingBy(User::getAge));
Map<String, List<User>> map1 = users().stream()
.collect(Collectors.groupingBy(User::getName));
System.out.println(new Gson().toJson(map));
System.out.println();
System.out.println(new Gson().toJson(map1));
System.out.println();
Map<String, Map<Integer, List<User>>> map2 = users().stream()
.collect(Collectors.groupingBy(User::getName,
Collectors.groupingBy(User::getAge)));
System.out.println(new Gson().toJson(map2));
}
/*拼接*/
public static void join() {
List<User> list = users();
String names = list.stream()
.map(User::getName)
.collect(Collectors.joining(", "));
System.out.println(names);
}
/*一次性得到元素的个数、总和、最大值、最小值*/
public static void allVlaue() {
List<User> list = users();
IntSummaryStatistics statistics = list.stream()
.collect(Collectors.summarizingInt(User::getAge));
System.out.println(statistics);
}
/*求和_平均值*/
public static void sum_avg() {
List<User> list = users();
int totalAge = list.stream()
.collect(Collectors.summingInt(User::getAge));
System.out.println("totalAge--> " + totalAge);
double avgAge = list.stream()
.collect(Collectors.averagingInt(User::getAge));
System.out.println("avgAge--> " + avgAge);
}
/*最大值最小值*/
public static void max_min() {
List<User> list = users();
Optional<User> max = list.stream()
.collect(
Collectors.maxBy(
Comparator.comparing(User::getAge)
)
);
Optional<User> min = list.stream()
.collect(
Collectors.minBy(
Comparator.comparing(User::getAge)
)
);
System.out.println("max--> " + max + " min--> " + min);
}
/*count()计算总数*/
public static void count() {
List<User> list = users();
long count = list.stream().count();
System.out.println(count);
}
/*findFirst( ):找到第一个元素*/
public static void findfirst() {
List<User> list = users();
Optional<User> optionalUser = list.stream()
.sorted(Comparator.comparingInt(User::getAge))
.findFirst();
System.out.println(optionalUser.toString());
}
/*noneMatchT->boolean)流中是否有元素匹配给定的 T -> boolean条件*/
public static void noneMatch() {
List<User> list = users();
boolean flag = list.stream()
.noneMatch(user -> user.getName().contains("张三李四"));
System.out.println(flag);
}
/*anyMatch(T->boolean)检测是否有任意元素满足给定的条件*/
public static void anyMatch() {
List<User> list = users();
boolean flag = list.stream()
.anyMatch(user -> user.getAge() == 10);
System.out.println(flag);
}
/*allMatch(T->boolean)检测是否全部满足参数行为*/
public static void allMatch() {
List<User> list = users();
boolean flag = list.stream()
.allMatch(user -> user.getAge() >= 10);
System.out.println(flag);
}
/*flatMap(T -> Stream<R>)*/
public static void flatmap() {
List<String> flatmap = new ArrayList<>();
flatmap.add("常宣灵,常昊灵");
flatmap.add("孟婆,判官红,判官蓝");
/*
这里原集合中的数据由逗号分割,使用split进行拆分后,得到的是Stream<String[]>,
字符串数组组成的流,要使用flatMap的Arrays::stream
将Stream<String[]>转为Stream<String>,然后把流相连接
*/
flatmap = flatmap.stream()
.map(s -> s.split(","))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
for (String name : flatmap) {
System.out.println(name);
}
}
/*map(T->R)*/
public static void map() {
List<User> list = users();
List<String> newlist = list.stream()
.map(User::getName).collect(Collectors.toList());
for (String add : newlist) {
System.out.println(add);
}
}
/*skip去除前n个元素*/
public static void skip() {
List<User> list = users();
List<User> newlist = list.stream()
.sorted(Comparator.comparingInt(User::getAge))
.skip(2)
.collect(Collectors.toList());
for (User user : newlist) {
System.out.println(user.getName() + " --> " + user.getAge());
}
}
/*limit返回前n个元素*/
public static void limit() {
List<User> list = users();
List<User> newlist = list.stream()
.sorted(Comparator.comparingInt(User::getAge))
.limit(2)
.collect(Collectors.toList());
for (User user : newlist) {
System.out.println(user.getName() + " --> " + user.getAge());
}
}
/*sorted排序*/
public static void sorted() {
List<User> list = users();
List<User> newlist = list.stream()
.sorted(Comparator.comparingInt(User::getAge))
.collect(Collectors.toList());
for (User user : newlist) {
System.out.println(user.getName() + " --> " + user.getAge());
}
}
/*distinct 去重*/
public static void distinct() {
List<User> list = users();
List<User> newlist = list.stream().distinct().collect(Collectors.toList());
for (User user : newlist) {
System.out.println(user.getName() + " --> " + user.getAge());
}
}
/*filter过滤(T-> boolean)*/
public static void filter() {
List<User> list = users();
List<User> newlist = list.stream().filter(user -> user.getAge() > 20)
.collect(Collectors.toList());
for (User user : newlist) {
System.out.println(user.getName() + " --> " + user.getAge());
}
}
public static List<User> users() {
List<User> list = Arrays.asList(
new User("张三", 20),
new User("张三", 23),
new User("张三", 20),
new User("李四", 10),
new User("王五", 30)
);
return list;
}
}
package com.baobei.ademo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author Chenyf
* @date 2022/3/31 11:04
*/
@Data
public class User {
//姓名
private String name;
//年龄
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'\'' +
'}';
}
}