Giả sử tôi muốn xem một đối tượng có tồn tại trong luồng không và nếu nó không có mặt, hãy ném Ngoại lệ. Một cách tôi có thể làm điều đó sẽ sử dụng phương pháp orElseThrow
:Ném ngoại lệ nếu tùy chọn <> hiện diện
List<String> values = new ArrayList<>();
values.add("one");
//values.add("two"); // exception thrown
values.add("three");
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.orElseThrow(() -> new RuntimeException("not found"));
Điều gì ngược lại? Nếu tôi muốn ném một ngoại lệ nếu có hợp được tìm thấy:
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.ifPresentThrow(() -> new RuntimeException("not found"));
Tôi chỉ có thể lưu trữ các Optional
, và làm isPresent
kiểm tra sau:
Optional<String> two = values.stream()
.filter(s -> s.equals("two"))
.findAny();
if (two.isPresent()) {
throw new RuntimeException("not found");
}
Có cách nào để đạt được ifPresentThrow
loại này của hành vi? Đang cố gắng ném theo cách này là một thực hành xấu?
Điểm của 'orElseThrow' là chuyển đổi giá trị thành không bắt buộc với xử lý lỗi nếu giá trị không tồn tại. Vì tất cả những gì bạn quan tâm là nếu giá trị tồn tại, tại sao không sử dụng phương thức được thiết kế cho mục đích này: 'isPresent'? –