Tôi đang viết một phương thức có đầu vào Map
của biểu mẫu Map<Term, List<Integer>>
trong đó Term
được xác định here.Java 8 - Danh sách bộ lọc bên trong giá trị bản đồ
Phương pháp:
- Đi qua các phím của
Map
và lọc chúng bằng cách sử dụng thuộc tínhTerm
. - Đối với mỗi phím còn lại, có được kích thước của danh sách tương ứng, nắp nó đến 5 (
min(List.size(), 5)
) và thêm đầu ra cho một var toàn cầu (nói,totalSum
) - Return
totalSum
này là những gì tôi đã viết cho đến thời điểm này:
inputMap
.entrySet()
.stream()
.filter(entry -> entry.getKey().field().equals(fieldName)) // Keep only terms with fieldName
.forEach(entry -> entry.getValue()
.map(size -> Math.min(entry.getValue().size(), 5))) // These 2 lines do not work
.sum();
Tôi không thể lấy làm đầu vào một danh sách, xuất số nguyên cho mỗi danh sách đó và trả về tổng của tất cả các kết quả đầu ra.
Tôi rõ ràng có thể viết nó bằng cách sử dụng cho vòng, nhưng tôi đang cố gắng để tìm hiểu Java 8 và tò mò nếu vấn đề này là khả năng giải quyết bằng cách sử dụng nó.
Giao diện 'Map' hiện có phương thức' forEach() 'của riêng nó, lấy một thể hiện' BiConsumer'. Điều này có thể được sử dụng để đơn giản hóa mã của bạn. –