Java JDK1.8 Lambda的多种用法,Lambda的多种写法,Lambda表达式

数据(测试)

说明:泛型String可以灵活,判断条件也是

List<String> list = Arrays.asList("aa", "ccc", "ddd", "bbb", "ccc");
或者
List<Integer> list = Arrays.asList(11, 22, 33, 44, 55);

打印(遍历)

以前的写法

for (String s : list) {
	System.out.println(s);
}

使用lambda的写法

list.forEach(System.out::println);

或1

list.forEach(s -> System.out.println(s));

或2

list.forEach(s -> {
	System.out.println(s);
});

排序

以前的写法

Collections.sort(list, new Comparator<String>() {
   @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});

使用lambda的写法

Collections.sort(list, (o1, o2) -> o1.compareTo(o2));

或对象

// 倒序
List<Personal> newList = list.stream().sorted(Comparator.comparing(Personal::getAge).reversed()).collect(Collectors.toList());

删除 .reversed() 为正序

判断是否存在

以前的写法

for(String s : list) {
    if(s.equals("ddd")) {
        return true;
    }
}
return false;

使用lambda的写法

boolean b = list.stream().anyMatch(s -> s.equals("ccc"));

boolean b1 = list.stream().filter(s -> s.equals("ccc")).findFirst().isPresent();

判断存在的值,并返回list

以前的写法

 List<String> list2 = new ArrayList<>();
 for(String s : list) {
     if(s.equals("ddd")) {
         list2.add(s);
     }
 }

使用lambda的写法

List<String> list3 = list.stream().filter(s -> s.equals("ccc")).collect(Collectors.toList());

累加求和

以前的写法

int sum = 0;
for (Integer v : list) {
    sum += v;
}

使用lambda的写法

int sum = list.stream().reduce(0, (s, v) -> s + v);

去重

以前的写法

懒得写,Set/Map/List都可以实现

使用lambda的写法

List<String> list2 = list.stream().distinct().collect(Collectors.toList());

List<Personal> distinctList = list.stream()
	.collect(Collectors.collectingAndThen(Collectors.toCollection(
	() -> new TreeSet<>(Comparator.comparing(Personal::getName))), ArrayList::new));

分组

以前的写法

此次省略

lambda的写法

Map<Integer, List<Personal>> map = list.stream().collect(Collectors.groupingBy(Personal::getId));

最大值

Personal max = list.stream().max(Comparator.comparing(Personal::getAge)).get();

最小值

Personal min = list.stream().min(Comparator.comparing(Personal::getAge)).get();

线程

以前的写法

new Thread(new Runnable() {
   @Override
    public void run() {
        // 处理逻辑
    }
}).start();

使用lambda的写法

new Thread(() -> {
    // 处理逻辑
}).start();

MyBatis-Plus中用法

使用lambda的写法

LambdaQueryWrapper<DictEntity> queryWrapper = Wrappers.lambdaQuery();
// String字符串,判断是否不为空,条件满足,执行判断
queryWrapper.like(StrUtil.isNotBlank(dict.getDictName()), DictEntity::getDictName, dict.getDictName());
// Integer整型,判断是否不等于null,条件满足,执行判断
queryWrapper.like(ObjectUtil.isNotNull(dict.getDictType()), DictEntity::getDictType, dict.getDictType());

获取ID集

List<DeptEntity> deptList = deptService.selectUserDept(uid);
String dids = deptList.stream().map(DeptEntity::getDid).collect(Collectors.joining(","));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值