如果map不是null,忽略以下方法。
List<User> userList = Lists.newArrayList();
@Before
public void initTest() {
List<Address> addressList = Lists.newArrayList();
addressList.add(Address.builder().area("铜山").city("徐州").build());
addressList.add(Address.builder().area("江宁").city("南京").build());
addressList.add(Address.builder().area("雨花").city("南京").build());
userList.add(User.builder().name("张三").sex(1).age(40).addressList(addressList).build());
userList.add(User.builder().name("里斯").sex(2).age(40).addressList(addressList).build());
userList.add(User.builder().name("张三").sex(2).age(40).addressList(addressList).build());
userList.add(User.builder().name("李四").sex(2).age(50).addressList(addressList).build());
}
/**
* java8map用法,merge将重复key对应值合并到一起。
*/
@Test
public void mergeTest() {
HashMap<String, Integer> map = Maps.newHashMap();
userList.forEach(user -> {
map.merge(user.getName(), user.getAge(), (o, n) -> o + n);
//map.merge(user.getName(), user.getAge(), (o, n) -> o);若key重复,value不变。
});
map.forEach((k, v) -> System.out.println(k + "," + v));
/**
* 李四,50
* 里斯,40
* 张三,80
*/
}
/**
* user: computeIfAbsent若map中存在key,取原有key对应value,否则取新的
*/
@Test
public void computeIfAbsentTest() {
//list
HashMap<String, List<User>> map = Maps.newHashMap();
ArrayList<User> objects = Lists.newArrayList();
objects.add(User.builder().name("张三").sex(1).age(40).build());
map.put("k", objects);
//User
HashMap<String, User> maps = Maps.newHashMap();
maps.put("k", new User().setName("hs1").setAge(4).setSex(1));
maps.computeIfAbsent("k", l -> new User().setName("hs").setAge(90));
maps.forEach((k, v) -> System.out.println(k + "," + v));
/**
* k,User(name=hs, sex=1, age=90, addressList=null)
*/
}
/**
* putIfAbsent若map中存在key,取原有key对应value,否则取新的
*/
@Test
public void putIfAbsentTest() {
HashMap<String, User> maps = Maps.newHashMap();
maps.put("k", new User().setName("hs1").setAge(4).setSex(1));
maps.putIfAbsent("k", new User());
System.out.println(maps.get("k"));
}
/**
* 两个参数
*/
@Test
public void computeTest() {
HashMap<String, User> maps = Maps.newHashMap();
maps.put("k", new User().setName("hs1").setAge(4).setSex(1));
maps.compute("k", (k, v) -> v);
System.out.println(maps.get("k"));
/**
* User(name=hs1, sex=1, age=4, addressList=null)
*/
}