您的位置:首页 > 编程语言 > Java开发

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

2017-06-06 18:20 363 查看
由于工作需要如下是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 programm
4000
er", "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]


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: