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

32 篇文章 0 订阅
28 篇文章 0 订阅

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值