由于工作需要如下是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]