如果为空列表则返回错误,如果没有则返回Java 8 lambda

问题描述

是否有更优雅的方法可以做到这一点?

List<Model1> list1 = this.dao.list();
list1.stream().findFirst().orElseThrow(Exception::new);
List<Model2> list2 = list1.stream().map(this::buildModel2).collect(toList());

理想情况下,我想将第2行和第3行合并为一行,同时保留相同的行为。

解决方法

您可以通过Optional过滤的!isEmpty()运行该列表:

List<Model2> list2 = Optional.of(list1).filter(c -> !c.isEmpty())
  .orElseThrow(Exception::new).stream().map(this::buildModel2).collect(toList());

——-

实际上,所有三行都可以变成一行:

List<Model2> list2 = Optional.of(dao.list()).filter(c -> !c.isEmpty())
  .orElseThrow(Exception::new).stream().map(this::buildModel2).collect(toList());