java8-Lambda表达式

近期学习lambda表达式,做一些总结

package com.tre.wms.pda.web.controller;



import java.util.*;
import java.util.stream.Collectors;

public class Lambda {
    public static void main(String[] args) {
        // 创建实体类,增加数据
        List<TestList> test = new ArrayList<>();
        test.add(new TestList("周大",25,"男","java初级工程师"));
        test.add(new TestList("吴二",26,"女","java高级工程师"));
        test.add(new TestList("张三",21,"男","java初级工程师"));
        test.add(new TestList("李四",23,"女","项目经理"));
        test.add(new TestList("王五",23,"男","java初级工程师"));
        test.add(new TestList("赵六",23,"女","测试工程师"));
        test.add(new TestList("马七",23,"女","Android初级工程师"));
        test.add(new TestList("候八",21,"男","java初级工程师"));
        test.add(new TestList("孙九",22,"男","java初级工程师"));

        System.err.println("******     原始数据输出  ********");
        // 输出数据
        for (TestList testValue:test) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        //筛选   只取1个
        TestList test1 = test.stream().filter(a->  "男".equals(a.getSex())).findFirst().get();
        System.err.println("******       筛选性别为男的数据   只取第一条    ********");
        System.err.println("***姓名:"+test1.getName()+"******年龄:"+test1.getAge()+"*******性别:"+test1.getSex());

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        //筛选    符合条件的所有
        List<TestList>  test2 = test.stream().filter(a->"男".equals(a.getSex())).collect(Collectors.toList());
        System.err.println("******       筛选性别为男的数据   符合条件的所有    ********");
        for (TestList testValue:test2
             ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }


        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        //计算   求和

        Integer  test3 = test.stream().map(TestList::getAge).reduce(0,Integer ::sum);
        System.err.println("*********  年龄求和  ****************          "+test3);

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        // 单个属性去重
        List<TestList> test4 = test.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TestList::getSex))), ArrayList::new));
        System.err.println("******      单个属性去重  按照性别去重    ********");
        for (TestList testValue:test4
        ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        //多个属性去重
        System.err.println("******      多个属性去重  按照性别,年龄 去重    ********");
        List<TestList> test5 = test.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(
                                o ->    o.getAge() + ";" +
                                        o.getSex() +";"
                                ))
                        ), ArrayList::new));


        for (TestList testValue:test5
        ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }
        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        // 排序 正序
        List<TestList> test6 = test.stream()
                .sorted(Comparator.comparing(TestList::getSex))
                .collect(Collectors.toList());
        System.err.println("******      排序   性别正序    ********");
        for (TestList testValue:test6
        ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        // 排序  倒序
        List<TestList> test7  = test.stream()
                .sorted(Comparator.comparing(TestList::getSex).reversed())
                .collect(Collectors.toList());
        System.err.println("******      排序   性别倒序    ********");
        for (TestList testValue:test7
        ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");


        // 排序 多个字段  正-倒
        List<TestList> test8 = test.stream()
                .sorted(Comparator.comparing(TestList::getSex).reversed().thenComparing(TestList::getAge).reversed())

                .collect(Collectors.toList());
        System.err.println("******      排序   性别正序,年龄倒序    ********");
        for (TestList testValue:test8
        ) {
            System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
        }

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");


        //按照性别分组
        Map<String, List<TestList>> test9 = test.stream().collect(Collectors.groupingBy(TestList::getSex));
        System.err.println("******     按照性别分组    ********");
        for (Map.Entry<String, List<TestList>> entryUser : test9.entrySet()) {
            String key = entryUser.getKey();
            List<TestList> test91 = entryUser.getValue();
            System.err.println("******    key   ********         "+key);
            for (TestList testValue:test91
            ) {
                System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
            }
        }


        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");


       // 提取职业属性
        List<String> test10 = test.stream().map(TestList::getOccupation).collect(Collectors.toList());
        System.err.println("******    提取职业属性  ********");
        System.err.println(test10.stream().collect(Collectors.toList()));




        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");

        // 提取职业属性并去重
        List<String> test11 = test.stream().map(TestList::getOccupation).distinct().collect(Collectors.toList());
        System.err.println("******    提取职业属性并去重  ********");
        System.err.println(test11.stream().collect(Collectors.toList()));

        System.err.println("");    System.err.println("*************分割线**************");    System.err.println("");
    }


    public static class TestList {

        public  TestList(String name, int age, String sex, String occupation){
            this.name=name;
            this.age=age;
            this.sex=sex;
            this.occupation=occupation;
        }

        private String name;
        private int age;
        private String sex;
        private String  occupation;

        public String getOccupation() {
            return occupation;
        }

        public void setOccupation(String occupation) {
            this.occupation = occupation;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getSex() {
            return sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }
    }

}

执行结果

****** 原始数据输出 ********
姓名:周大年龄:25性别:男
姓名:吴二
年龄:26
性别:女
姓名:张三
年龄:21
性别:男
姓名:李四
年龄:23
性别:女
姓名:王五
年龄:23
性别:男
姓名:赵六
年龄:23
性别:女
姓名:马七
年龄:23
性别:女
姓名:候八
年龄:21
性别:男
姓名:孙九
年龄:22
****性别:男

分割线*

****** 筛选性别为男的数据 只取第一条 ********
姓名:周大年龄:25****性别:男

分割线*

****** 筛选性别为男的数据 符合条件的所有 ********
姓名:周大年龄:25性别:男
姓名:张三
年龄:21
性别:男
姓名:王五
年龄:23
性别:男
姓名:候八
年龄:21
性别:男
姓名:孙九
年龄:22
****性别:男

分割线*

********* 年龄求和 **************** 207

分割线*

****** 单个属性去重 按照性别去重 ********
姓名:吴二年龄:26性别:女
姓名:周大
年龄:25
******性别:男

分割线*

****** 多个属性去重 按照性别,年龄 去重 ********
姓名:张三年龄:21性别:男
姓名:孙九
年龄:22
性别:男
姓名:李四
年龄:23
性别:女
姓名:王五
年龄:23
性别:男
姓名:周大
年龄:25
性别:男
姓名:吴二
年龄:26
******性别:女

分割线*

****** 排序 性别正序 ********
姓名:吴二年龄:26性别:女
姓名:李四
年龄:23
性别:女
姓名:赵六
年龄:23
性别:女
姓名:马七
年龄:23
性别:女
姓名:周大
年龄:25
性别:男
姓名:张三
年龄:21
性别:男
姓名:王五
年龄:23
性别:男
姓名:候八
年龄:21
性别:男
姓名:孙九
年龄:22
****性别:男

分割线*

****** 排序 性别倒序 ********
姓名:周大年龄:25性别:男
姓名:张三
年龄:21
性别:男
姓名:王五
年龄:23
性别:男
姓名:候八
年龄:21
性别:男
姓名:孙九
年龄:22
性别:男
姓名:吴二
年龄:26
性别:女
姓名:李四
年龄:23
性别:女
姓名:赵六
年龄:23
性别:女
姓名:马七
年龄:23
****性别:女

分割线*

****** 排序 性别正序,年龄倒序 ********
姓名:吴二年龄:26性别:女
姓名:李四
年龄:23
性别:女
姓名:赵六
年龄:23
性别:女
姓名:马七
年龄:23
性别:女
姓名:周大
年龄:25
性别:男
姓名:王五
年龄:23
性别:男
姓名:孙九
年龄:22
性别:男
姓名:张三
年龄:21
性别:男
姓名:候八
年龄:21
****性别:男

分割线*

****** 按照性别分组 ********
****** key ******** 女
姓名:吴二年龄:26性别:女
姓名:李四
年龄:23
性别:女
姓名:赵六
年龄:23
性别:女
姓名:马七
年龄:23
性别:女
****** key ******** 男
姓名:周大
年龄:25
性别:男
姓名:张三
年龄:21
性别:男
姓名:王五
年龄:23
性别:男
姓名:候八
年龄:21
性别:男
姓名:孙九
年龄:22
****性别:男

分割线*

****** 提取职业属性 ********
[java初级工程师, java高级工程师, java初级工程师, 项目经理, java初级工程师, 测试工程师, Android初级工程师, java初级工程师, java初级工程师]

分割线*

****** 提取职业属性并去重 ********
[java初级工程师, java高级工程师, 项目经理, 测试工程师, Android初级工程师]

分割线*

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值