package com.example.demo.util;
import com.example.demo.entity.UserPO;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 过滤list中对象的某个属性非空,然后返回一个新的list
*/
public class LambdaForList {
public static void main(String[] args) {
//1. 初始化数据
UserPO user1 = new UserPO(1, "java");
UserPO user2 = new UserPO(2, "C");
UserPO user3 = new UserPO(3, "PHP");
List<UserPO> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
//3. list转map
Map<Integer, String> userMap = Maps.newHashMap();
userMap = users.stream().collect(Collectors.toMap(UserPO::getId, UserPO::getName));
System.out.println(userMap.toString());
}
}
输出
{1=java, 2=C, 3=PHP}
常见错误异常
java.lang.IllegalStateException: Duplicate key java
对应代码块:
package com.example.demo.util;
import com.example.demo.entity.UserPO;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LambdaForList {
public static void main(String[] args) {
//1. 初始化数据
UserPO user1 = new UserPO(1, "java");
UserPO user2 = new UserPO(2, "C");
UserPO user3 = new UserPO(1, "PHP");
List<UserPO> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
//3. list转map
Map<Integer, String> userMap = Maps.newHashMap();
userMap = users.stream()
.collect(Collectors
.toMap(UserPO::getId, UserPO::getName));
System.out.println(userMap.toString());
}
}
异常信息:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key java
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1254)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.example.demo.util.Test.main(Test.java:27)
分析:user1和user3的id都是1,导致key重复
解决:JDK8中Collectors.toMap方法报Duplicate key xxx错误信息
Duplicate key
代码块:
package com.example.demo.util;
import com.example.demo.entity.UserPO;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LambdaForList {
public static void main(String[] args) {
//1. 初始化数据
UserPO user1 = new UserPO(1, "java");
UserPO user2 = new UserPO(2, "C");
UserPO user3 = new UserPO(1, "PHP");
List<UserPO> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
//3. list转map
Map<Integer, String> userMap = Maps.newHashMap();
userMap = users.stream()
.collect(Collectors
.toMap(UserPO::getId, UserPO::getName, (value1,value2) -> value2));
System.out.println(userMap.toString());
}
}
输出
{1=PHP, 2=C}
版权声明:本文为expect521原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。