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]