Tôi đã từng sử dụng phương pháp Stream#Peek
của Java rất nhiều vì đây là phương pháp hữu ích để gỡ lỗi hoạt động của luồng trung gian. Đối với những người bạn của những người không quen thuộc với các phương pháp Stream#Peek
, dưới đây cho thấy các định nghĩa của nó:Tương đương với phương pháp Stream # Peek của Java trong Linq C# là gì?
Stream<T> peek(Consumer<? super T> action)
Trả về một dòng gồm các yếu tố của dòng này, bổ sung thực hiện hành động cung cấp trên mỗi phần tử là các yếu tố được tiêu thụ từ luồng kết quả. Đây là hoạt động trung gian .
Hãy xem xét ví dụ này đơn giản dưới đây:
List<Integer> integerList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
List<Integer> result = integerList.stream()
.filter(i -> i % 2 == 0)
.peek(System.out::println)
.collect(Collectors.toList());
Với phương pháp Stream#Peek
, điều này về cơ bản nên cho phép tôi để in tất cả các số chẵn để giao diện điều khiển để tôi có thể kiểm tra để xem nếu đó là những gì Tôi mong chờ.
Tôi đã cố gắng để tìm một câu trả lời cho câu hỏi trong tầm tay nhưng dường như không thể tìm thấy một phương pháp tương tự trong C#
, không ai biết tương đương với Java Stream#Peek
hoặc một số phương pháp khác với hành vi tương tự?
Có phương pháp ForEach trong lớp List (có một số tranh luận về lý do không có sẵn cho IEnumerable), vì vậy bạn cần gọi "ToList" trước khi sử dụng. Mặc dù nó trả về void, không phải một danh sách khác. Nhưng nó là tầm thường để viết phương pháp mở rộng của riêng bạn cho IEnumerable mà làm điều đó. – user1242967
@ user1242967 Không có * tranh luận * về lý do tại sao nó không tồn tại cho 'IEnumerable'. Có cuộc tranh luận về việc liệu nó có phải là một ý tưởng hay cho 'IEnumerable' hay không, nhưng tại sao nó không được đặt ra rõ ràng và không có vấn đề gì. – Servy
@Servy Vâng, từ ngữ xấu về phía tôi. – user1242967