public class Demo {
public static void main(String[] args) {
b();
}
/**
* List<User> 里多层对象,分组
*/
public static void b() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setUserName("张三");
Book book = new Book();
book.setBookName("边城");
u1.setBook(book);
User u2 = new User();
u2.setUserName("李四");
Book book2 = new Book();
book2.setBookName("霍乱时期的爱情");
u2.setBook(book2);
userList.add(u2);
userList.add(u1);
Map<String, User> collect = userList.stream().collect(Collectors.groupingBy(a -> a.getBook().getBookName(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
}
/**
* 获取Map<Long, List<User>> 中value里的某个属性
*/
public static void a() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setUserName("张三");
userList.add(u1);
List<User> userList2 = new ArrayList<>();
User u2 = new User();
u2.setUserName("李四");
userList2.add(u2);
Map<Long, List<User>> map = new HashMap<>(4);
map.put(1L, userList);
map.put(2L, userList2);
List<String> userNameList = map.values().stream().flatMap(Collection::stream).map(User::getUserName).distinct().collect(Collectors.toList());
System.out.println(userNameList);
}
static class User {
private String userName;
private Book book;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}
static class Book {
private String bookName;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
}