本文转自 https://blog.csdn.net/jhgnqq/article/details/123679622 感谢楼主分享
import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class StreamDemo { List<Student> list = null; //初始化数据 @Before public void beforetest() { list = Arrays.asList( new Student("Tom", 18, 88, 90), new Student("Jerry", 20, 77, 89), new Student("Lily", 17, 98, 79), new Student("Lucy", 19, 70, 80), new Student("LiLei", 18, 88, 90), new Student("HanMeiMei", 21, 87, 79)); } @Test public void streamtest() { // filter 过滤器返回还是一个stream流对象 //查询math成绩大于80的学生并遍历输出 list.stream().filter(e->e.getMath()>80).forEach(System.out::println);//.forEach(e->System.out.println(e)) //统计数量count System.out.println(list.stream().count()); //如统计总分大于160的人数 System.out.println(list.stream().filter(e->e.getEnglish()+e.getMath()>160).count()); //limit 取前n个值 list.stream().limit(3).forEach(System.out::println); //skip 跳过前n个 list.stream().skip(2).forEach(System.out::println); //distinct 去除重复数据 list.stream().distinct().forEach(System.out::println); //map 映射元素可以对元素进行操作 例如对每个学生年龄加1 list.stream().map(e->{ e.setAge(e.getAge()+1); return e; }).forEach(System.out::println); //sorted 排序 //升序 list.stream().sorted((a,b)->{ return a.getEnglish().compareTo(b.getEnglish()); }); //降序 list.stream().sorted((a,b)->{ return b.getEnglish().compareTo(a.getEnglish()); }); //返回第一个元素 Optional<Student> first = list.stream().findFirst(); System.out.println(first.get()); //返回任意一个元素 System.out.println(list.stream().findAny().get()); //anyMatch 是否匹配任意一元素 检查是否包含名字为Tom的 System.out.println(list.stream().anyMatch(e->e.getName().equals("Tom"))); //allMatch 是否匹配所有元素 System.out.println(list.stream().allMatch(e->e.getName().equals("Tom"))); //noneMatch 是否未匹配所有元素 System.out.println(list.stream().noneMatch(e->e.getName().equals("Tom"))); //findFirst 返回元素中第一个值 Student student = list.stream().findFirst().get(); //findAny 返回元素中任意一个值 Student student1 = list.stream().findAny().get(); //max 返回最大值 查询英语成绩最高的学生 Student student2 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); //min 最小值 将上面l1,l2位置对调 Student student3 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); //将流对象转为list list.stream().filter(e->e.getMath()>80).collect(Collectors.toList()); //将流转未set list.stream().filter(e->e.getMath()>80).collect(Collectors.toSet()); //对对象中的某项进行统计 IntSummaryStatistics c = list.stream().collect(Collectors.summarizingInt(Student::getEnglish)); System.out.println(c);//IntSummaryStatistics{count=6, sum=507, min=79, average=84.500000, max=90} } } //entity import lombok.Data; @data public class Student { private String name; private Integer age; private Integer math; private Integer english; }
另外一篇应用举例 (16条消息) Java8之list.stream的常见使用_大白给小白讲故事的博客-CSDN博客_list stream
public static void main(String[] args) { List<Student> list = Lists.newArrayList(); list.add(new Student("测试", "男", 18)); list.add(new Student("开发", "男", 20)); list.add(new Student("运维", "女", 19)); list.add(new Student("DBA", "女", 22)); list.add(new Student("运营", "男", 24)); list.add(new Student("产品", "女", 21)); list.add(new Student("经理", "女", 25)); list.add(new Student("产品", "女", 21)); //求性别为男的学生集合 List<Student> l1 = list.stream().filter(student -> student.sex.equals("男")).collect(toList()); //map的key值true为男,false为女的集合 Map<Boolean, List<Student>> map = list.stream().collect(partitioningBy(student -> student.getSex().equals("男"))); //求性别为男的学生总岁数 Integer sum = list.stream().filter(student -> student.sex.equals("男")).mapToInt(Student::getAge).sum(); //按性别进行分组统计人数 Map<String, Integer> map = list.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.summingInt(p -> 1))); //判断是否有年龄大于25岁的学生 boolean check = list.stream().anyMatch(student -> student.getAge() > 25); //获取所有学生的姓名集合 List<String> l2 = list.stream().map(Student::getName).collect(toList()); //求所有人的平均年龄 double avg = list.stream().collect(averagingInt(Student::getAge)); //求年龄最大的学生 Student s = list.stream().reduce((student, student2) -> student.getAge() > student2.getAge() ? student:student2).get(); Student stu = list.stream().collect(maxBy(Comparator.comparing(Student::getAge))).get(); //按照年龄从小到大排序 List<Student> l3 = list.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(toList()); //求年龄最小的两个学生 List<Student> l4 = l3.stream().limit(2).collect(toList()); //获取所有的名字,组成一条语句 String str = list.stream().map(Student::getName).collect(Collectors.joining(",", "[", "]")); //获取年龄的最大值、最小值、平均值、求和等等 IntSummaryStatistics intSummaryStatistics = list.stream().mapToInt(Student::getAge).summaryStatistics(); System.out.println(intSummaryStatistics.getMax()); System.out.println(intSummaryStatistics.getCount()); } @Data @AllArgsConstructor static class Student{ String name; String sex; Integer age; }
标签:stream,list,System,Student,println,Java8,out From: https://www.cnblogs.com/sdlz/p/16986511.html