Nhiều lambdas cho giao diện Function
mang hình thứcChuyển đổi Người tiêu dùng đến chức năng
t -> {
// do something to t
return t;
}
Tôi làm điều này vì vậy thường xuyên mà tôi đã viết một phương pháp để nó như thế này.
static <T> Function<T, T> consumeThenReturn(Consumer<T> consumer) {
return t -> {
consumer.accept(t);
return t;
};
}
Điều này cho phép tôi làm điều thật sự tốt đẹp như thế này:
IntStream.rangeClosed('A', 'Z')
.mapToObj(a -> (char) a)
.collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle)))
.forEach(System.out::print);
Có một cách khác để làm chuyển đổi như thế này mà không dựa vào phương pháp của riêng tôi? Có bất cứ điều gì trong các API mới tôi đã bỏ lỡ mà làm cho phương pháp của tôi thừa?
Tôi không nghĩ là có: hãy xem mã 'Collectors.toList()' chẳng hạn, nó có '(trái, phải) -> {left.addAll (phải); trở về bên trái; }, '. Đó là vấn đề của các phương thức thay đổi đối số của chúng ... (side-note, bạn có thể có 'UnaryOperator' thay vì 'Function ') –
Tunaki
Tôi sẽ đổi tên hàm thành ['tee'] (https: //en.wikipedia .org/wiki/Tee_ (lệnh)). – dasblinkenlight
Mọi thứ đã được nói, nhưng tôi đang làm việc trên một cái gì đó đã làm điều này. https://github.com/TouK/ThrowingFunction/ bất kỳ đầu vào nào được đánh giá cao –