目录
5.skip跳过,limit截取,skip结合limit实现分页功能
9.mapToInt、mapToDouble、mapToLong求和
1.filter过滤
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 23));
list.add(new User("李四", "女", 25));
list.add(new User("王五", "女", 32));
list.add(new User("赵六", "男", 54));
//过滤出年龄大于30岁的
List<User> users = list.stream()
.filter(u -> u.getAge() > 30)
.collect(Collectors.toList());
//过滤出年龄大于30并且性别是男的
List<User> userList = list.stream()
.filter(m -> m.getAge() > 30 && "男".equals(m.getSex()))
.collect(Collectors.toList());
System.out.println(users);
System.out.println(userList);
}
}
结果:
2.map转换
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 23));
list.add(new User("李四", "女", 25));
list.add(new User("王五", "女", 32));
list.add(new User("赵六", "男", 54));
//User转String
List<String> names = list.stream().map(User::getName).collect(Collectors.toList());
//User转Map
List<Map> maps = list.stream().map(m -> {
Map map = new HashMap<>();
map.put("name", m.getName());
map.put("sex", m.getSex());
return map;
}).collect(Collectors.toList());
System.out.println(names);
System.out.println(maps);
}
}
结果:
3.distinct去重
public class Stream_Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("AAA");
list.add("AAA");
list.add("BBB");
list.add("BBB");
list.add("CCC");
List<String> strings = list.stream().distinct().collect(Collectors.toList());
System.out.println(strings);
}
}
结果:
4.groupingBy分组
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 23));
list.add(new User("李四", "女", 25));
list.add(new User("王五", "女", 32));
list.add(new User("赵六", "男", 54));
list.add(new User("田七", "男", 57));
//根据性别分组
Map<String, List<User>> sexMap = list.stream().collect(Collectors.groupingBy(User::getSex));
sexMap.forEach((k, v) -> System.out.println(k + ":" + v));
}
}
结果:
5.skip跳过,limit截取,skip结合limit实现分页功能
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 23));
list.add(new User("李四", "女", 25));
list.add(new User("王五", "女", 32));
list.add(new User("赵六", "男", 54));
list.add(new User("田七", "男", 57));
//skip跳过多少条
List<User> skip = list.stream().skip(2).collect(Collectors.toList());
//limit截取多少条
List<User> limit = list.stream().limit(3).collect(Collectors.toList());
//skip结合limit实现分页
Integer pageIndex = 1;
Integer pageSize = 2;
List<User> page = list.stream().skip((pageIndex - 1) * pageSize)
.limit(pageSize).collect(Collectors.toList());
System.out.println("skip = " + skip);
System.out.println("limit = " + limit);
System.out.println("page = " + page);
}
}
结果:
6.sorted排序
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 33, 1));
list.add(new User("李四", "女", 25, 2));
list.add(new User("王五", "女", 32, 4));
list.add(new User("赵六", "男", 54, 6));
list.add(new User("田七", "男", 27, 34));
list.add(new User("王信", "男", 27, 9));
list.add(new User("黄三", "男", 27, 12));
//按照年龄升序排序
List<User> usersAsc = list.stream()
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
usersAsc.forEach(user -> System.out.println(user));
System.out.println("=====================");
//按照年龄降序排序
List<User> usersDesc = list.stream()
.sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());
usersDesc.forEach(user -> System.out.println(user));
//按照年龄排序,再按照编号排序
System.out.println("=====================");
List<User> usersName = list.stream()
.sorted(Comparator.comparing(User::getAge).thenComparing(User::getNumber))
.collect(Collectors.toList());
usersName.forEach(user -> System.out.println(user));
}
}
7.max、min 获取最大值、最小值
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 33, 1));
list.add(new User("李四", "女", 25, 2));
list.add(new User("王五", "女", 32, 4));
list.add(new User("赵六", "男", 54, 6));
list.add(new User("田七", "男", 27, 34));
list.add(new User("王信", "男", 27, 9));
list.add(new User("黄三", "男", 27, 12));
//年龄最大的
User max = list.stream().max(Comparator.comparing(User::getAge)).get();
//年龄最小的
User min = list.stream().min(Comparator.comparing(User::getAge)).get();
System.out.println("max = " + max);
System.out.println("min = " + min);
}
}
结果:
8.List转Map
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 33, 1));
list.add(new User("李四", "女", 25, 2));
list.add(new User("王五", "女", 32, 4));
list.add(new User("赵六", "男", 54, 6));
list.add(new User("田七", "男", 27, 34));
list.add(new User("王信", "男", 27, 9));
list.add(new User("黄三", "男", 27, 12));
//key为name,value为User对象
Map<String, User> map = list.stream().collect(Collectors.toMap(User::getName, User -> User));
//key为name,value为Number对象
Map<String, Integer> nameNumber = list.stream().collect(Collectors.toMap(User::getName, User::getNumber));
map.forEach((k, v) -> System.out.println(k + ":" + v));
nameNumber.forEach((k, v) -> System.out.println(k + ":" + v));
}
}
结果:
8.peek
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 33, 1));
list.add(new User("李四", "女", 25, 2));
list.add(new User("王五", "女", 32, 4));
list.add(new User("赵六", "男", 54, 6));
list.add(new User("田七", "男", 27, 34));
list.add(new User("王信", "男", 27, 9));
list.add(new User("黄三", "男", 27, 12));
//在流执行的过程中看到第一次filter的结果
List<User> collect = list.stream()
.filter(u -> u.getSex().equals("女"))
.peek(u -> System.out.println("第一次filter的结果:" + u.getName()))
.filter(u -> u.getName().equals("王五")).collect(Collectors.toList());
collect.forEach(u -> System.out.println(u));
}
}
结果:
9.mapToInt、mapToDouble、mapToLong求和
public class Stream_Demo {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", "男", 33, 1));
list.add(new User("李四", "女", 25, 2));
list.add(new User("王五", "女", 32, 4));
list.add(new User("赵六", "男", 54, 6));
list.add(new User("田七", "男", 27, 34));
list.add(new User("王信", "男", 27, 9));
list.add(new User("黄三", "男", 27, 12));
//求和,平均值
int int_sum = list.stream().mapToInt(User::getAge).sum();
double double_sum = list.stream().mapToDouble(User::getAge).sum();
long float_sum = list.stream().mapToLong(User::getNumber).sum();
double avg = list.stream().mapToInt(User::getNumber).average().orElse(0);
System.out.println(int_sum);
System.out.println(double_sum);
System.out.println(float_sum);
System.out.println(avg);
}
}