91名师指路-头部
91名师指路

java8 lambda表达式常见用法

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一:循环集合【lambda】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);
// 循环集合[lambda] userList.forEach(item -> {
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

李四

20

王五

32


二:循环集合【stream】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);
// 循环集合[stream] userList.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});

}

执行结果:

张三

18

李四

20
王五

32


三:集合过滤【查询年龄 > 25】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 集合过滤[查询年龄 > 25]
List<User> newList=userList.stream().filter(item -> item.getAge()>25).collect(Collectors.toList());
newList.stream().forEach(item -> {
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

王五

32


四:分组【按照性别进行分组】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 分组[按照性别进行分组]
Map<String, List<User>> mp=userList.stream().collect(Collectors.groupingBy(User::getSex));
mp.forEach((key, value)->System.out.println("性别:" + key));
}

执行结果:

性别:女
性别:男


五:排序 - 升序【排序字段为字符串类型 name】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 4 排序 - 升序[排序字段为字符串类型 name]
List<User> sortList1=userList.stream().sorted((o1, o2) -> o1.getName().compareTo(o2.getName())).collect(Collectors.toList());
sortList1.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

李四

20

王五

32


六:排序 - 降序【排序字段为字符串类型 name】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 排序 - 降序[排序字段为字符串类型 name]
List<User> sortList2=userList.stream().sorted((o1, o2) -> o2.getName().compareTo(o1.getName())).collect(Collectors.toList());
sortList2.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

王五

32

李四

20

张三

18


七:排序 - 升序【排序字段为数字类型 age】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 排序 - 升序[排序字段为数字类型 age]
List<User> sortList3=userList.stream().sorted((o1, o2) -> o1.getAge() - o2.getAge()).collect(Collectors.toList());
sortList3.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

李四

20

王五

32


八:排序 - 降序【排序字段为数字类型 age】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 排序 - 降序[排序字段为数字类型 age]
List<User> sortList4=userList.stream().sorted((o1, o2) -> o2.getAge() - o1.getAge()).collect(Collectors.toList());
sortList4.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

王五

32

李四

20

张三

18


九:获取集合对象的某一属性返回一个新集合【获取userList中的name字段然后返回一个新的list】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 6 获取集合对象的某一属性返回一个新集合[获取userList中的name字段然后返回一个新的list]
List<String> strList = userList.stream().map(item -> item.getName()).collect(Collectors.toList());
strList.stream().forEach(item -> {
System.out.println(item);
});
}

执行结果:

张三
李四
王五


十:判断集合中是否存在某个值【判断userList中是否有age=20的数据】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 判断集合中是否存在某个值[判断userList中是否有age=20的数据]
boolean flag=userList.stream().anyMatch(item -> item.getAge() == 20);
System.out.println(flag);
}

执行结果:

true


十一:统计【按照年龄进行sum】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 统计[按照年龄进行sum]
long count=userList.stream().mapToLong(User::getAge).sum();
System.out.println(count);
}

执行结果:

70


十二:求集合中某个属性的最大值、最小值、平均值、总和、数量

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// 求集合中某个属性的最大值、最小值、平均值、总和、数量
LongSummaryStatistics summary=userList.stream().mapToLong(item -> item.getAge()).summaryStatistics();
long max=summary.getMax();
long min=summary.getMin();
double average=summary.getAverage();
long sum=summary.getSum();
long count=summary.getCount();

System.out.println(max);
System.out.println(min);
System.out.println(average);
System.out.println(sum);
System.out.println(count);
}

执行结果:

32
18
23.333333333333332
70
3


十三:distinct对字段进行去重

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("李四");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// distinct对字段进行去重
List<Integer> integerList=Arrays.asList(1,2,3,4,5,5,5,6);
List<Integer> distinctList=integerList.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);
}

执行结果:

[1, 2, 3, 4, 5, 6]


十四:list去重 - 单个字段【根据name字段去重(注意去重后是无序的)】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("张三");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// list去重 - 单个字段[根据name字段去重(注意去重后是无序的)]
List<User> list1=userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(cn -> cn.getName()))), ArrayList::new));
list1.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

王五

32


十五:list去重 - 多个字段【根据name和sex字段去重(注意去重后是无序的)】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("张三");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// list去重 - 多个字段[根据name和sex字段去重(注意去重后是无序的)]
List<User> list2=userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(cn -> cn.getName() + cn.getSex()))), ArrayList::new));
list2.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

王五

32


十六:limit【限制只取2条数据】

public static void main(String[] args) {
List<User> userList=new ArrayList<>();

User u1=new User();
u1.setName("张三");
u1.setSex("女");
u1.setAge(18);

User u2=new User();
u2.setName("张三");
u2.setSex("女");
u2.setAge(20);

User u3=new User();
u3.setName("王五");
u3.setSex("男");
u3.setAge(32);

userList.add(u1);
userList.add(u2);
userList.add(u3);

// limit[限制只取2条数据]
List<User> limitList=userList.stream().limit(2).collect(Collectors.toList());
limitList.stream().forEach(item ->{
System.out.println(item.getName());
System.out.println(item.getSex());
System.out.println(item.getAge());
System.out.println();
});
}

执行结果:

张三

18

张三

20


十七:对userList根据tuId进行去重, lambda groupby 去重后无法获取到去重后的list, 所以采用如下的方式来进行去重

List<UserInfo> apiList=userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getTuId()))), ArrayList::new));


十八:比较2个list差集

List<BusinessDistrict> subtractionList=apiList.stream()
.filter(item -> !dbList.stream().map(e -> e.getBizCode()).collect(Collectors.toList()).contains(item.getBizId()))
.collect(Collectors.toList());


十九:将list转为map

1)list转map,key为tuId, name为 tuName

List<UserInfo> apiList=userInfoMapper.selectUserInfo();
Map<String, String> map=apiList.stream().collect(Collectors.toMap(UserInfo::getTuId, UserInfo::getTuName));


2)假设name出现了重复,此时会报 java.lang.IllegalStateException: Duplicate key

List<UserInfo> apiList=userInfoMapper.selectUserInfo();
Map<String, UserInfo> map=apiList.stream().collect(Collectors.toMap(UserInfo::getName, Function.identity());


3)解决上面报 java.lang.IllegalStateException: Duplicate key的方法

List<UserInfo> apiList=userInfoMapper.selectUserInfo();
Map<String, UserInfo> map=apiList.stream().collect(Collectors.toMap(UserInfo::getName, Function.identity(), (key1, key2) -> key2));

备注:(key1, key2) -> key2)的意思是当key1,key2两个键值对的key值重复时,保留第二个即key2,反之(key1, key2) -> key1)则保留第一个即key1


二十:根据属性在list中进行过滤

1)根据id在list中查找等于id的值

List<TbUser> taaList = userList.stream().filter(item -> item.getOrgId().equals(childOrgId)).collect(Collectors.toList());

2)根据id在list中查找包含id中的值

List<TbUser> tuList = userList.stream().filter(f -> childOrgId.contains(f.getOrgId())).collect(Collectors.toList());


二十一:在list中查找元素并返回一个对象

TbUser us=userList.stream().filter(item -> item.getOrgId().equals(sonOrgId) && item.getNickName().equals(sonOrgName)).findFirst().orElse(null);


二十二:获取所有id集合

List<UserInfo> apiList=userInfoMapper.selectUserInfo();
List<String> idList=apiList.stream().map(UserInfo::getTuId).collect(Collectors.toList());


二十三:排序

1)正序排列

List<UserInfo> aa=apiList.stream().sorted(Comparator.comparing(UserInfo::getTuId)).collect(Collectors.toList());

2)倒序排列

List<UserInfo> aa=apiList.stream().sorted(Comparator.comparing(UserInfo::getTuId).reversed()).collect(Collectors.toList());


二十四:Map根据key和value进行排序

1)根据Map中的key进行排序

/**
* 功能:根据map中的key进行排序
* 网址:https://91mszl.com
* @Author: zxb
* @Date: 2022-04-11 11:21:41
*/
public static void main(String[] args) {
Map<String, String> map=new HashMap<String, String>();
map.put("2022年05月", "吃饭");
map.put("2022年04月", "睡觉");
map.put("2022年06月", "去超市");

Map<String, String> sortedMap = map.entrySet().stream().sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
System.out.println("Sorted Map: " + Arrays.toString(sortedMap.entrySet().toArray()));
}

执行结果:

Sorted Map: [2022年04月=睡觉, 2022年05月=吃饭, 2022年06月=去超市]


2)根据Map中的value进行排序

/**
* 功能:根据map中的value进行排序
* 网址:https://91mszl.com
* @Author: zxb
* @Date: 2022-04-11 11:21:41
*/
public static void main(String[] args) {
Map<String, String> map=new HashMap<String, String>();
map.put("2022年05月", "33");
map.put("2022年04月", "22");
map.put("2022年06月", "55");
Map<String, String> sortedMap = map.entrySet().stream().sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
System.out.println("Sorted Map: " + Arrays.toString(sortedMap.entrySet().toArray()));
}

执行结果:

Sorted Map: [2022年04月=22, 2022年05月=33, 2022年06月=55]


二十五:根据list对象中的某个属性进行去重。

List<TopicInfoVO> propertyDistinct=propertyList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TopicInfoVO::getClassifyCode))), ArrayList::new
));


二十六:Collectors.partitioningBy是一种将流的元素始终分为两部分的方法,它返回一个在Map中存储值的收集器,注意:在Map中的key只能是true或false

public static void main(String[] args) {
UserInfo ui1=new UserInfo();
ui1.setName("张三");
ui1.setAge(20);

UserInfo ui2=new UserInfo();
ui2.setName("李四");
ui2.setAge(22);

UserInfo ui3=new UserInfo();
ui3.setName("王五");
ui3.setAge(24);

List<UserInfo> userList=new ArrayList<>();
userList.add(ui1);
userList.add(ui2);
userList.add(ui3);

Map<Boolean, List<UserInfo>> collect = userList.stream().collect(Collectors.partitioningBy(item -> item.getAge() > 21));
collect.forEach((k, v) -> {
System.out.println("key为: " + k + ",value为: " + v);
});
}

执行结果:

key为: false,value为: [UserInfo(name=张三, age=20)]
key为: true,value为: [UserInfo(name=李四, age=22), UserInfo(name=王五, age=24)]




2021-05-06 14:39:39     阅读(741)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部