小编joe*_*ens的帖子

在Java8中的可选项中抛出异常

有一种方法get(sql)(我不能修改它).这个方法返回MyObjects,它必须在try catch块中,因为JqlParseException那里是可能的.我的代码是:

String sql = something;
try{
   MyObject object = get(sql);
} catch(JqlParseException e){
   e.printStackTrace();
} catch(RuntimeException e){
   e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我想删除try catch并使用Optional类,我试过:

MyObject object = Optional.ofNullable(get(sql)).orElseThrow(RuntimeException::new);
Run Code Online (Sandbox Code Playgroud)

但是那里的IDE力量也尝试了.并为:

MyObject object = Optional.ofNullable(get(sql)).orElseThrow(JqlParseException::new));
Run Code Online (Sandbox Code Playgroud)

是一个错误(在IDE中)The type JqlParseException does not define JqlParseException() that is applicable.有没有办法避免尝试catch块并使用可选的?

java java-8

24
推荐指数
2
解决办法
5万
查看次数

按键通过流排序的集合

我有一个简单的类,有三个值:

class Book{
   private String title;
   private String author;
   private double price;
}
Run Code Online (Sandbox Code Playgroud)

title是独一无二的(永远).有一个选定的标题列表(as List<String>)和每个Book系统的列表.我希望Book从标题列表中获取所有密钥.我的代码是:

List<Book> allBooks = getAllBooks();
List<String> selectedTitles = getSelectedTitles();
List<Book> selectedBooks = allBooks.stream().
   filter(x -> selectedTitles.contains(x.getTitle())).
   collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但是选择的allBook书籍是通过insted 来订购的selectedTitles.例如:

allBooks(only title) = {"A","B","C","D"}
selectedTitles = {"B","A","D"}
selectedBooks(only title) = {"A","B","D"}
Run Code Online (Sandbox Code Playgroud)

怎么可能(通过stream()订购selectedTitles?)(这个例子应该是{"B","D","A"}

java java-8 java-stream

2
推荐指数
1
解决办法
71
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×1