2015-05-22 35 views
5

tôi muốn biết liệu có cách nào hiệu quả hơn để tổng hợp tất cả các danh sách cây hay không - tổng hợp các giá trị của chúng ở cùng một chỉ mục.Danh sách tổng hợp API Java Streams tại chỉ mục

Lý do tại sao tôi yêu cầu bởi vì, có thể sử dụng API luồng, có thể làm cho nó chung chung hơn, cho bất kỳ số lượng danh sách nào.

List<Double> listA = getListA(); 
List<Double> listB = getListB(); 
List<Double> listC = getListC(); 

int listsSize = listA.size(); 

    List<?> collect = IntStream.range(0, listsSize) 
      .mapToObj(i -> listA.get(i) + listB.get(i) + list(C).get(i)) 
      .collect(toList()); 

nhờ cho bất kỳ cái nhìn sâu sắc.

+0

gì khác mà bạn muốn sử dụng nó cho - tất cả 'Number's? – ChiefTwoPencils

+0

@ChiefTwoPencils Có, bạn đã đúng, tôi đã bỏ lỡ điều hiển nhiên ở đó, tôi đã chỉnh sửa nó, câu hỏi vẫn hợp lệ đối với bất kỳ số lượng danh sách nào, cảm ơn – dotmindlabs

+0

@sodik i có nghĩa là cho bất kỳ số danh sách nào, nếu tôi cho phép nói 100 danh sách, sử dụng chỉ số từ một phạm vi và nhận được giá trị của họ 100 lần dường như quá mức. – dotmindlabs

Trả lời

5

Làm thế nào về điều này:

List<List<Double>> lists = ...; 

// ensure all lists are same size, and get size 
int[] sizes = lists.stream().mapToInt(List::size).distinct().toArray(); 
if (sizes.length != 1) 
    throw ... 
int size = sizes[0]; 

double[] sums = 
    IntStream.range(0, size) 
      .mapToDouble(i -> lists.stream().mapToDouble(list -> list.get(i)).sum()) 
      .toArray(); 
+0

typo nhỏ, nó phải là 'lists.stream(). MapToInt (...)', :-) Ngoài ra, bạn không thể thực hiện điều này nhiều hơn với một '.distinct(). Limit (2)', do đó ngay khi bạn tìm thấy hơn 2 kích thước khác nhau, bạn dừng tính toán? – user2336315

+0

Rất tốt, đơn giản và sạch sẽ, có ý nghĩa, cảm ơn! – dotmindlabs

+2

@ user2336315 Sửa lỗi đánh máy. Đề xuất của bạn về "giới hạn" là OK, nhưng thẳng thắn tôi sẽ không bận tâm; "chi phí" bổ sung chỉ hiển thị ngay trước khi bạn định ném một ngoại lệ. Tối ưu hóa nhỏ trên các con đường sẽ thất bại hiếm khi đáng giá thêm phức tạp. –

Các vấn đề liên quan