Tôi muốn kết hợp hai mảng chung theo cặp theo một số BiFunction
. Ở đây bạn thấy việc thực hiện ngây thơ:Cách thanh lịch để kết hợp hai mảng theo cặp trong Java 8
<A,B,C> C[] combine(A[] as, B[] bs, BiFunction<A,B,C> op) {
if (as.length == bs.length) {
C[] cs = (C[]) new Object[as.length];
for(int i = 0; i < as.length; i++) {
cs[i] = op.apply(as[i], bs[i]);
}
return cs;
} else {
throw new IllegalArgumentException();
}
}
Tôi tự hỏi nếu có một cách thanh lịch hơn để làm điều này mà không có một cho vòng - có lẽ với Java 8 Stream
. Tôi sẽ hạnh phúc về đề xuất của bạn.
Trong khi Aominè cung cấp phiên bản dựa trên luồng của vòng lặp của bạn, tôi không nghĩ nó thanh lịch hơn. Nhưng nó mở ra khả năng xử lý song song nếu bạn thêm '.parallel()' sau '.range (..)' để sử dụng cách tiếp cận đó có thể tốt hơn trong môi trường đa xử lý. – Pshemo
Bạn có thể sử dụng ['Streams.zip()'] của Guava (https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Streams.html#zip-java .util.stream.Stream-java.util.stream.Stream-java.util.function.BiFunction-). – shmosel
Bạn không nên kìm nén cảnh báo đó, btw. Nó sắp bị thổi vào mặt bạn sớm hay muộn. – shmosel