Tôi đang cố gắng tính toán phép nhân của một giá trị bằng cách sử dụng hai giá trị trước đó bằng cách sử dụng luồng của java 8. Tôi muốn gọi một hàm sẽ trả về một mảng/danh sách/bộ sưu tập. Tôi đang tạo Danh sách và thêm 1,2 vào danh sách đó.Truyền một bộ sưu tập bằng cách sử dụng hàm reduce (3 parameters) - stream java 8
Giả sử tên danh sách là kết quả.
public static void main (String[] args) {
List<Integer> result = new ArrayList<Integer>();
result.add(1);
result.add(2);
int n = 5; //n can be anything, choosing 5 for this example
res(n, result);
//print result which should be [1, 2, 2, 4, 8]
}
public static List<Integer> res(int n, List<Integer> result) {
result.stream()
.limit(n)
.reduce(identity, (base,index) -> base);
//return result;
}
Bây giờ vấn đề đang cố gắng chuyển kết quả vào luồng để tiếp tục cập nhật danh sách với các giá trị mới bằng cách sử dụng luồng. Theo hướng dẫn java, có thể, mặc dù không hiệu quả.
"Nếu hoạt động giảm của bạn liên quan đến việc thêm yếu tố vào bộ sưu tập, thì mỗi lần hàm tích lũy của bạn xử lý một phần tử, nó sẽ tạo bộ sưu tập mới bao gồm phần tử không hiệu quả."
Tôi có cần phải sử dụng tham số thứ ba tùy chọn, bộ phối hợp nhị phân, để kết hợp danh sách + kết quả không ??
<U> U reduce(U identity,
BiFunction<U,? super T,U> accumulator,
BinaryOperator<U> combiner)
Tóm lại; Tôi muốn chuyển một danh sách với hai giá trị và có hàm tìm phép nhân của hai giá trị đầu tiên (1,2), thêm nó vào danh sách và tìm phép nhân của hai giá trị cuối cùng (2,2) và thêm nó vào danh sách và cho đến khi luồng đạt đến giới hạn.
Được coi là thực tế rằng 'reduce' có thể không phải là công cụ thích hợp để thực hiện chức năng này? –