如果空列表则返回错误,如果不为空则使用 Java 8 Lambda。

huangapple go评论75阅读模式
英文:

if empty list returns error, if not list 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行合并成一行,同时保持相同的行为。

英文:

Is there a more elegant way to do this:

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

Ideally, I would like to combine lines 2 and 3 into one line while retaining the same behaviour.

答案1

得分: 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());
英文:

You could run the list through an Optional filtered on !isEmpty():

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

——-

Actually, all 3 lines can become one line:

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

huangapple
  • 本文由 发表于 2020年8月13日 07:18:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/63385900.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定