java8中的stream,function包的常用方法总结

xiaoxiao2021-02-28  78

由于工作需要如下是java8中的stream,function两个包中的常用方法.

一,首先定义两个List:

 List<Person> javaProgrammers=new ArrayList<Person>(){             {                 add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));                 add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));                 add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));                 add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));                 add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));                 add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));                 add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));                 add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));                 add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));                 add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));             }         };         List<Person> phpProgrammers = new ArrayList<Person>() {             {                 add(new Person("Jarrod", "Pace", "PHP programmer", "male", 3400, 1550));                 add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));                 add(new Person("Victor", "Channing", "PHP programmer", "male", 3200, 1600));                 add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21000, 1000));                 add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));                 add(new Person("Rosalind", "Layla", "PHP programmer", "female", 250000, 1300));                 add(new Person("Fraser", "Hewie", "PHP programmer", "male", 3600, 1100));                 add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));                 add(new Person("Alvin", "Lance", "PHP programmer", "male", 3800, 1600));                 add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));             }         };

二,然后是一些常用的方法:

     //1,使用forEach方法来迭代输出上述列表         javaProgrammers.forEach(person -> System.out.printf("%s %s",person.getFirstName(),person.getLastName()));         //使用forEach方法,增加程序员的工资5%         Consumer<Person> givenRaise=person -> person.setSalary(person.getSalary()/100*5+person.getSalary());         javaProgrammers.forEach(givenRaise);        //2,使用过滤器filter() ,让我们显示月薪超过1400美元的PHP程序员:         phpProgrammers.stream().filter(person -> person.getSalary()>1800).forEach(person -> System.out.printf("%s%s",person.getFirstName(),person.getLastName()));         //3,自定义过滤器         Predicate<Person> ageFilter=person -> person.getAge()>24;         Predicate<Person> salaryFilter=person -> person.getSalary()>1400;         Predicate<Person> genderFilter=person -> ("male".equalsIgnoreCase(person.getGender()));         //下面是年龄大于 24岁且月薪在$1,400以上的女PHP程序员,使用limit方法,可以限制结果集的个数:         phpProgrammers.stream().filter(ageFilter).filter(salaryFilter).filter(genderFilter).limit(2).forEach(person -> System.out.printf("%s,",person.getFirstName()));         //3,排序,由小到大,字符串的排序         List<Person> sortedJava=javaProgrammers.stream().sorted((p1,p2)->p1.getFirstName().compareTo(p2.getFirstName())).collect(Collectors.toList());         sortedJava.stream().forEach(person -> System.out.println(person.getFirstName()));         //排序,由小到大,整型的排序         javaProgrammers.stream().sorted((p1,p2)->p1.getSalary()-p2.getSalary()).forEach(person -> System.out.println(person.getSalary()));         //4,最低工资,namely,min         Person person1=javaProgrammers.stream().min((p1,p2)->p1.getSalary()-p2.getSalary()).get();         //最高工资,namely,max         Person person2=javaProgrammers.stream().max((p1,p2)->p1.getSalary()-p2.getSalary()).get();         //5,将 PHP programmers 的 first name 拼接成字符串,以 ","作为分隔符         String phpDeveloper=phpProgrammers.stream().map(Person::getFirstName).collect(joining(","));         //6,将 Java programmers 的 first name 存放到 Set         Set<String> phpSet=phpProgrammers.stream().map(Person::getFirstName).collect(Collectors.toSet());         //7,将 Java programmers 的 first name 存放到 TreeSet         TreeSet<String> phpTreeSet=phpProgrammers.stream().map(Person::getFirstName).collect(toCollection(TreeSet::new));         //8,并行操作,计算付给 Java programmers 的所有money,Streams 还可以是并行的(parallel)         int totalMoney=javaProgrammers.parallelStream().mapToInt(person->person.getSalary()).sum();         //9,计算 count, min, max, sum, and average for numbers         List<Integer> numbers=Arrays.asList(1,2,3,4,5,6,7,8,9,10);         IntSummaryStatistics statistics=numbers.stream().mapToInt(x->x).summaryStatistics();         double avg=statistics.getAverage();         long count=statistics.getCount();         int max=statistics.getMax();         int min=statistics.getMin();         long sum=statistics.getSum();

//map ,flatmap的区别:map能够直接操作list中的每个对象,而使用flatmap使我们能够操作更深一层的数据,如下:List<List<?>> List<Integer> integerList=Arrays.asList(1,2,3,4,5); integerList.stream().map(integer -> integer+1).forEach(System.out::println);//2,3,4,5,6 List<List<Integer>> outer=new ArrayList<>(); List<Integer> inner1=new ArrayList<>(); List<Integer> inner2=new ArrayList<>(); List<Integer> inner3=new ArrayList<>(); List<Integer> inner4=new ArrayList<>(); List<Integer> inner5=new ArrayList<>(); List<Integer> inner6=new ArrayList<>(); inner1.add(1); inner2.add(2); inner3.add(3); inner4.add(4); inner5.add(5); inner6.add(6); outer.add(inner1); outer.add(inner2); outer.add(inner3); outer.add(inner4); outer.add(inner5); outer.add(inner6); List<Integer> result=outer.stream().flatMap(inner->inner.stream().map(integer -> integer+1)).collect(Collectors.toList()); System.out.println(result);//[2, 3, 4, 5, 6, 7]

转载请注明原文地址: https://www.6miu.com/read-20058.html

最新回复(0)