lameda表达式日常记录

本文介绍Lambda表达式的多种应用场景,包括修改List集合值、提取对象属性、遍历List和Map、处理空值及去重等,并提供示例代码。

lameda表达式越来越受欢迎,网络上已有很多基础知识,不在此阐述,直接看代码都是一些日常很基础使用的案列,作为笔记记录:

场景1

更改list集合内符合条件存储的值
普通for循环

for (int i = 0; i < cellList.size(); i++) {
	if(cellList.get(i).equals("")){
		cellList.set(i, null);
	}
}

lameda实现

改变集合里面所有元素指定属性的值
List<DemoUser> userList=Stream.of(new DemoUser("a"),new DemoUser("b"),new DemoUser("c")).peek(u->u.setName("kkk")).collect(Collectors.toList());
System.out.println(userList);
List<String> collect = cellList.stream().map(x -> {return x.equals("") ? null : x;}).collect(Collectors.toList());

场景2

将list集合内存储对象的某个属性单独拿出来放到一个新集合里面:

普通方式:

List<TabColumns> columList = queryTabColumns.queryTabColumnsService(tableName);
List<String> alist = new ArrayList<String>();
for (TabColumns tabColumns : columList) {
	alist.add(tabColumns.getColumn_name());
}

lameda方式:

List<String> alist= columList.stream().map(s ->s.getColumn_name()).collect(Collectors.toList());

将符合条件的放到新集合内:
List<String> collect = tableHeaderList.stream().filter(x -> x.contains("#")).collect(Collectors.toList());

场景3

遍历list
此部分知识参考于:https://blog.csdn.net/qq_26718271/article/details/70257049
普通方式:

List<String> list= new ArrayList<>();
list.add("人民币");
list.add("美元");
list.add("英镑");

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

lameda方式:

List<String> list= new ArrayList<>();
list.add("人民币");
list.add("美元");
list.add("英镑");

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

list.forEach(s->{
    if("英镑".equals(s)){
        System.out.println(s);
    }
});

场景4

遍历map

此部分知识摘录于:https://blog.csdn.net/qq_26718271/article/details/70257049
普通方式:

Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);

for (Map.Entry<String, Integer> entry : items.entrySet()) {
    System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
}

lameda方式:

Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);

items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));

items.forEach((k,v)->{
    System.out.println("Item : " + k + " Count : " + v);
    if("C".equals(k)){
        System.out.println("Hello C");
    }
});

场景5

提取list集合里对象里的属性的值,放入到一个新的list集合内。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class LamdaTest {
   
   public static void main(String[] args) {

        List<User> list = new ArrayList<>();
        list.add(new User("robin",14));
        list.add(new User("time",88));
        list.add(new User("jeck",99));

        List<String> collect = list.stream().map(n -> n.getName()).collect(Collectors.toList());
        System.out.println(collect);
    }

}
输出结果:[robin, time, jeck]

场景6

取User对象里面指定属性的值;如果这个对象或者这个属性的值不存在就用orElse里面的值返回.如果存在就返回属性的值。

对象或者属性不为null情况测试:

User tom = new User("tom", 7);
Integer status = Optional.ofNullable(tom).map(User::getAge).orElse(18);
System.out.println(status);
输出结果:7

对象或者属性为null情况测试:

 User tom = new User("tom", 7);
 tom.setAge(null);     //(或者将tom对象设为空:tom = null;)
 Integer status = Optional.ofNullable(tom).map(User::getAge).orElse(18);
 System.out.println(status);
 输出结果:18

场景7

实现按某个属性值查找对象集合中符合条件的对象

Optional<User> userOptional = userList.stream().filter(item -> item.getUserId().equals(1L)).findFirst();
if (userOptional.isPresent()) {
    // 存在
    User user =  userOptional .get();
} else {
    // 不存在
}

场景8

lameda 双冒号
https://blog.csdn.net/weixin_37770552/article/details/77905826

 collected = collected.stream().map(string -> string.toUpperCase()).collect(Collectors.toList());  
也可以写成下面这样
 collected = collected.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new));

person -> person.getAge();   
Person::getAge

 new HashMap<>();
 HashMap::new

场景9

将list中三个字段都相同的数据进行去重
原文 https://blog.csdn.net/robotfive/article/details/89200294

现在有一个实体类Person,属性有三个,分别是name,age,address,根据这三个属性将list<Person>中三个字段都相同的数据进行去重。

//创建list,添加数据
        List<Person> list = new ArrayList<>();
        list.add(new Person("Tom", 15, "America"));
        list.add(new Person("Tam", 16, "China"));
        list.add(new Person("Tom", 15, "Japan"));
        list.add(new Person("Tcm", 18, "Russia"));
        list.add(new Person("Tom", 15, "America"));
        list.add(new Person("Tdm", 16, "America"));
        list.add(new Person("Tem", 17, "America"));

// 根据三个字段去重
        List<Person> lst = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(o -> o.getName() + "#" + o.getAge() + "#" + o.getAddress()))),
                ArrayList::new));

// 遍历输出一下
        lst.forEach(person -> System.out.println(person.toString()));

//结果:

Person [name=Tam, age=16, address=China]
Person [name=Tcm, age=18, address=Russia]
Person [name=Tdm, age=16, address=America]
Person [name=Tem, age=17, address=America]
Person [name=Tom, age=15, address=America]
Person [name=Tom, age=15, address=Japan]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值