lambda 表达式入门

 

 

 

Lambda表达式由三部分组成:

paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断1。另外当只有一个推断类型时可以省略掉圆括号。
->:可理解为“被用于”的意思
方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

 

1. list to map 

public class UserBean {

    private String userName;

    private Integer age;

    private String aihao;

    public UserBean(String userName,Integer age,String aihao){
        this.userName = userName;
        this.age = age;
        this.aihao = aihao;

    }
}


List<UserBean> userList = new ArrayList<>();
UserBean userBean = new UserBean("张三",21,"热爱学习");
userList.add(userBean);
userBean = new UserBean("张三2", 25,"热爱学习2");
userList.add(userBean);
userBean = new UserBean("张三", 27,"热爱学习3");
userList.add(userBean);
userBean = new UserBean("张三4", 26,"热爱学习2");
userList.add(userBean);

System.out.println(userList);

        // list of UserBean  转 Map<String,Integer> map
        Map<String,Integer> map =
                userList.stream().collect(Collectors.toMap(UserBean::getUserName, UserBean::getAge,
                        (key1,key2) ->key2));
        System.out.println("----map"+ JSONObject.toJSONString(map));

        // list of UserBean  转 Map<String,UserBean> userBeanMap
        Map<String,UserBean> userBeanMap =
                userList.stream().collect(Collectors.toMap(UserBean::getUserName, Function.identity(),
                        (key1,key2) ->key2));
        System.out.println("----userBeanMap"+ JSONObject.toJSONString(userBeanMap));

        // list of UserBean  转 Map<String,UserBean> userBeanMap   if  check
        Map<String, UserBean> userMapCheck = new HashMap<>();
        userList.forEach(userBean1 -> {
            if( userBean1.getAge() != null && userBean1.getAge().intValue() > 25){
                userMapCheck.put(userBean1.getUserName(),userBean1) ;
            }
        });
        System.out.println("----userMapCheck"+ JSONObject.toJSONString(userMapCheck));

// 方式2:使用流过滤,再使用foreach遍历
        Map<String, String> alarmObjUuidMap2 = new HashMap<>();
        alarmInfoResponseList.stream().
        filter(alarmInfoResponse -> !"-1".equals(alarmInfoResponse.getObjUuid())).
        forEach(alarmInfoResponse -> alarmObjUuidMap2.put(alarmInfoResponse.getAlarmUuid(), alarmInfoResponse.getObjUuid()));
        System.out.println("\n=============  方式2  ====================");
        alarmObjUuidMap2.forEach((alarmUuid, objUuid) -> System.out.println(alarmUuid + " : " + objUuid));

 

   list to map ,按照key分组,key不允许为null.  

        Map<Integer, List<UserBean>> groupBy = userList.stream().collect(Collectors.groupingBy(UserBean::getAge)) ;
        System.out.println(JSON.toJSONString(groupBy));

  list lambda 取出某一列

List<String> names = userList.stream().map(p -> p.getUserName()).collect(Collectors.toList());

list 安照字段排序

​List<EquipOverrunRecord> recordList = equipOverrunRecordService.findAll(); 
Collections.sort(recordList, new Comparator<EquipOverrunRecord>() {
                        @Override
                        public int compare(EquipOverrunRecord o1, EquipOverrunRecord o2) {
                            Double v1 = o1.getPeakValue();
                            Double v2 = o2.getPeakValue();
                            if (v1 != null && v2 != null) {
                                return v1.compareTo(v2);
                            } else {
                                return v1 == null ? 1 : -1;
                            }
                        }
                    });

lambda 排序  (降序)


userList.sort(Comparator.comparing(UserBean::getCreateTime, Comparator.nullsLast(Date::compareTo)).reversed());

list 过滤filter 

userList = userList.stream().filter(s -> {
return s.getCreateTime() != null ;
}).collect(Collectors.toList());

List 单个id值去重

        List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
        List<Integer> distinct = numbers.stream().distinct()
                .collect(Collectors.toList());

        System.out.println(JSON.toJSONString(distinct));

 

  2. map   使用

1.遍历map

可以先判断是否为空
​CollectionUtils.isEmpty(userMapCheck);

userMapCheck.forEach((key, value) -> {
   System.out.println("Key: " + key + ", Value: " + JSONObject.toJSONString(value));
   System.out.println(" value.getAge(): " + value.getAge() );
});

2. 两个同样的map合并

方式1
Map<String, UserBean> result = Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
      .collect(Collectors.toMap(
            Map.Entry::getKey,
            Map.Entry::getValue,
            (value1, value2) -> value2));
System.out.println(JSON.toJSONString(result));

方式2

        Map<String, UserBean> map3 = Stream.of(map1, map2)
                .flatMap(map -> map.entrySet().stream())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (v1, v2) -> v2 ));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值