目录
1、putIfAbsent源码
default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}
return v;
}
意思就是:putIfAbsent 如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null
2、putIfAbsent和put的区别
put不管什么直接存入,返回旧值,putIfAbsent如果为null才存入,返回旧值。
注意:旧值是指:当value存在时该value就是旧值,value不存在时null就是旧值。
3、案例
说明:处理重复数据与不重复数据,以重复数据为唯一,合并数据
直接实例:一个班级列表 list<class> classes,一个班级对象实体类class,里面是list<student> students列表
public class TestPutIfAbsertn {
public static void main(String[] args) {
List<ClassStu> dataes = Lists.newArrayList();
//学生/班级
dataes.add(new ClassStu(new Student(" 张三"),1));
dataes.add(new ClassStu(new Student(" 李四"),2));
dataes.add(new ClassStu(new Student(" 王五"),1));
dataes.add(new ClassStu(new Student(" 赵六"),2));
dataes.add(new ClassStu(new Student(" 孙七"),1));
dataes.add(new ClassStu(new Student(" 周八"),2));
dataes.add(new ClassStu(new Student(" 吴九"),1));
//一个班级列表list<class> classes,一个班级对象实体类class,里面是list<student> students列表
Map<Integer,List<Student>> map = Maps.newHashMap();
List<Student> student;
for (ClassStu classStu : dataes){
student = map.putIfAbsent(classStu.getClasses(),new ArrayList<Student>(dataes.size()));
if(null == student){
student = map.get(classStu.getClasses());
}
Student stu = new Student(classStu.getStudent().getName());
student.add(stu);
}
for(Map.Entry<Integer,List<Student>> m:map.entrySet()){
Integer i = m.getKey();
List<Student> stu = m.getValue();
System.out.print(i);
System.out.print("--");
System.out.println(stu);
System.out.println();
}
}
}
@AllArgsConstructor
@Data
public class ClassStu {
Student student;
int classes;
}
@Data
@AllArgsConstructor
public class Student {
private String name;
}