java8->list轉map判空,分組
阿新 • • 發佈:2020-09-08
/** * list轉map/分組 * @Author: Mr.li * @Date: 2020/9/8 */ @Test public void demo7() { List<User> userList = new ArrayList<User>() { { add(new User("付1", "男1", 20)); add(new User("付1", "男", 20)); add(new User("付2", "男", 21)); add(new User("付3", "男", 22)); add(new User("付4", "男", 23)); add(new User("付5", "男", 24)); add(new User(null, "男", 25)); } }; User user6 = new User("zhangsan", "男", 24); userList.add(user6);/** list 轉map * 注意:要是key重複的話 會報錯Duplicate key .... * key name 都是1 * 可以用 (k1,k2)->k1 來設定,如果有重複的key,則保留key1,捨棄key2 */ Map<String, Object> compMap = userList.stream().filter(e->e.getName()!=null).collect(Collectors.toMap(User::getName, a -> a.getAge() + "-->" + a.getName(), (k1, k2) -> k1));/*for (Object obj : compMap.keySet()) { String key = (String) obj;//取到每一個key值 String value = (String) compMap.get(key); System.out.println(key + ":" + value); }*/ compMap.forEach((k,v)->{ System.out.println(k+":"+v); }); /** * list中以某個屬性分組,比如用name分組 */ Map<String, List<User>> map = userList.stream().filter(e->e.getName()!=null).collect(Collectors.groupingBy(User::getName)); System.out.println("Map: "+map); System.out.println("User: "+ getUser(user6)); } /** * 得到user * @Author: Mr.li * @Date: 2020/9/8 */ public User getUser(User user) { return Optional.ofNullable(user) .filter(u -> "zhangsan".equals(u.getName())) .orElseGet(() -> { User user1 = new User(); user1.setName("zhangsan"); return user1; }); }
result: