英文:
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<Model1> list1 = this.dao.list();
list1.stream().findFirst().orElseThrow(Exception::new);
List<Model2> 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<Model2> list2 = Optional.of(list1).filter(c -> !c.isEmpty())
.orElseThrow(Exception::new).stream().map(this::buildModel2).collect(toList());
——-
Actually, all 3 lines can become one line:
List<Model2> list2 = Optional.of(dao.list()).filter(c -> !c.isEmpty())
.orElseThrow(Exception::new).stream().map(this::buildModel2).collect(toList());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论