1. 程式人生 > 其它 >Java steam流中toMap、groupingBy的簡單用法

Java steam流中toMap、groupingBy的簡單用法

技術標籤:java 基礎streamlambdajava

@Data
@ToString
public class Book {

    private String category;

    private String name;

    private int stock;

    public Book(String category, String name, int stock) {
        this.category = category;
        this.name = name;
        this.stock = stock;
    }
}
public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book("小說", "《西遊記》", 1));
    bookList.add(new Book("小說", "《鹿鼎記》", 2));
    bookList.add(new Book("歷史", "《史記》", 3));
    bookList.
add(new Book("歷史", "《四書五經》", 4)); // 根據型別進行彙總,同一個型別的書籍物件放到一個List中 Map<String, List<Book>> bookMap1 = bookList.stream() .collect(Collectors.groupingBy(Book::getCategory)); System.out.println(bookMap1); // 輸出: {"歷史":[{"category":"歷史","name":"《史記》","stock":3},{"category":"歷史","name":"《四書五經》","stock":4}],"小說":[{"category":"小說","name":"《西遊記》","stock":1},{"category":"小說","name":"《鹿鼎記》","stock":2}]}
// 根據型別進行彙總,同一個型別的書籍名稱放到一個List中 Map<String, List<String>> bookMap2 = bookList.stream() .collect(Collectors.groupingBy(Book::getCategory, Collectors.mapping(Book::getName, Collectors.toList()))); System.out.println(bookMap2); // 輸出: {"歷史":["《史記》","《四書五經》"],"小說":["《西遊記》","《鹿鼎記》"]} // 轉化為名稱,庫存Map Map<String, Integer> bookMap3 = bookList.stream() .collect(Collectors.toMap(Book::getName, Book::getStock, (oldVal, newVal) -> newVal)); System.out.println(bookMap3); // 輸出: {"《四書五經》":4,"《史記》":3,"《鹿鼎記》":2,"《西遊記》":1} // 根據名稱進行庫存量的彙總 Map<String, Integer> bookMap4 = bookList.stream() .collect(Collectors.toMap(Book::getCategory, Book::getStock, Integer::sum)); System.out.println(bookMap4); // 輸出: {"歷史":7,"小說":3} }