Tôi muốn tổng hợp một danh sách các số nguyên. Nó hoạt động như sau, nhưng cú pháp không cảm thấy đúng. Mã có thể được tối ưu hóa?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> irất rõ ràng, cá nhân. Chà, vâng, bạn cần biết rằng giá trị sẽ được tự động mở hộp, nhưng đó là sự thật kể từ Java 5 ...
foo(int i)này không viết foo(myInteger.intValue());mỗi lần họ gọi nó (hoặc ít nhất là tôi không mong đợi !!). Tôi đồng ý với bạn rằng Integer::intValuerõ ràng hơn nhưng tôi nghĩ điều tương tự áp dụng ở đây. Mọi người chỉ nên học nó một lần và sau đó bạn đã hoàn thành :-). Nó không giống như nếu đó là một phép thuật xáo trộn.
i -> itrông giống như một no-op và theo quan niệm, nó là một no-op. Chắc chắn, dưới mui xe Integer.intValue()được gọi, nhưng thậm chí sâu hơn dưới mui xe, các phương thức đó được đưa vào để trở thành chính xác không có gì giống như trong mã nguồn. Integer::intValuecó điểm thưởng là không tạo ra một phương thức tổng hợp trong mã byte nhưng nó không phải là yếu tố quyết định cách tổ chức mã nguồn của bạn.
mapToLongđể tránh tràn, tùy thuộc vào các giá trị mà bản đồ của bạn có thể có.