Tôi đang cố gắng để flatMap
Optional
s trong Java. Dưới đây là một ví dụ đơn giản:Java 8 flatMap + Optional.of không biên dịch
List<String> x = Arrays.asList("a", "b", "c");
List<String> result = x.stream().flatMap((val) -> val.equals("b") ? Optional.empty() : Optional.of(val)).collect(Collectors.toList());
tôi nhận được thông báo lỗi này từ trình biên dịch:
Error:(10, 27) java: incompatible types: no instance(s) of type variable(s) T exist so that java.util.Optional<T> conforms to java.util.stream.Stream<? extends R>
Có chuyện gì vậy? Dưới đây là một ví dụ về những gì tôi đang cố gắng để đạt được trong Scala:
List("a", "b", "c").flatMap(x => if (x == "b") None else Some(x))
Nó trả về:
res2: List[String] = List(a, c)
như mong đợi.
Làm cách nào để chuyển đổi thành Java để biên dịch?
Cảm ơn! Bình thường tôi sẽ lọc. Trong trường hợp này (trường hợp thực sự, không phải là ví dụ đồ chơi đơn giản) Tôi muốn sử dụng Optionals vì lọc sẽ có nghĩa là đào qua rất nhiều crap mà tôi cũng sẽ phải làm trong bản đồ-giai đoạn. – auramo
Khi mọi phần tử của luồng được ánh xạ tới chính xác một 'Tùy chọn', không cần sử dụng' flatMap'. Chỉ cần sử dụng '.map (val -> val.equals (" b ")? Optional.empty(): Tùy chọn.của (val)) ' – Holger
@ Holger Bạn hoàn toàn đúng. Tôi không nghĩ về nó. Tôi đã theo quyết định của OP để sử dụng một flatMap. – Eran