英文:
Collections.singletonList with lambda expressions
问题
我有这段代码,目前可以正常运行:
返回获取Hostimeta的时间(getHostimeta(time)):
.stream() // 转换为流
.filter(e -> e.getPersonneId() == enfantId) // 过滤条件,筛选符合条件的元素
.collect(Collectors.toList()) // 将流中的元素收集到列表中
.get(0); // 获取列表中的第一个元素
我想要验证列表是否只有一个元素:
返回Collections.singletonList(...),其中包含:
.stream() // 转换为流
.filter(e -> e.getPersonneId() == enfantId) // 过滤条件,筛选符合条件的元素
.collect(Collectors.toList()) // 将流中的元素收集到列表中
但是我遇到了以下编译错误:
所需类型:
IHostimeta
提供类型:
List<Hostimeta>
英文:
I have this piece of code that is working fine:
return getHostimeta(time)
.stream()
.filter(e -> e.getPersonneId() == enfantId)
.collect(Collectors.toList()).get(0);
I want to verify that the list has only 1 element:
return Collections.singletonList(getHostimeta(time)
.stream()
.filter(e -> e.getPersonneId() == enfantId)
.collect(Collectors.toList())).get(0);
but I have this compilation error:
Required type:
IHostimeta
Provided:
List<Hostimeta>
答案1
得分: 0
Collections.singletonList()
在解决这个问题时毫无帮助。最可行的解决方案有:
- 将
collect(toList())
的结果存储在一个变量中,在另一行中检查其大小是否为1。 - 使用另一个收集器——可以是自己编写的,也可以使用第三方库中的现有收集器,因为Java本身没有提供任何真正有助于此问题的解决方案。
- 通过其他集合操作来实现,例如:
stream.reduce((a, b) -> { throw new IllegalStateException(); }).get()
英文:
Collections.singletonList()
will not help you in any way with this problem. The most plausible available solutions are
-
to store the result of
collect(toList())
in a variable and, on a separate line, check that its size is 1 -
to use another collector -- either inventing your own, or using an existing one from a third party library, since Java doesn't provide anything that can really help here out of he box
-
to make this out of other collection operations, e.g.
stream.reduce((a, b) -> { throw new IllegalStateException(); }).get()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论