【发布时间】:2022-01-19 00:37:42
【问题描述】:
我有一个接受对象列表的方法。
我想遍历该列表并检查该列表是否包含 3 个以上的元素。如果是这样,我想抛出错误 You can only add 3 elements
如果没有,我想将这些元素保存在数据库中。
在这种情况下,我想使用 Java 8 流。
到目前为止,我有这个代码:
public List<MyObject> addMyObject(List<MyObject> myObject) {
if (playingStyle.isEmpty()) {
throw new IllegalArgumentException("object cannot be null");
}
return myObject.stream()
.limit(3)
.map( ps -> {
try {
return repository.save(new MyObject(
ps.getName(), ps.getAverage(), ps.getPriority()
));
} catch (Exception e) {
log.warn("MyObject fields not correct {} {}", ps, e.getMessage());
throw e;
}
})
.collect(Collectors.toList());
}
我曾尝试使用.limit(),但它的作用是获取前 3 个对象(如果我发送了 4 个)并保存它们,最后一个就忘记了。
我想要实现的是如果列表为空返回错误,如果列表大小大于 3 则返回错误,但使用 Java 8。
【问题讨论】:
-
list.size() > 3 有什么问题?
-
保存时为什么要创建
new MyObject()? -
@ÓscarLópez 没有任何问题,但我想看看如何使用 Java 8 :)
-
@user9347049 在 Java 8 中,你可以像在 Java 1.0 中那样做 :) 。这绝不是流的好用例,流用于以惰性方式处理(可能)大量元素,对每个元素执行一些操作和/或累积它们;经历使用流而不是使用具有相同效果的
size()之类的O(1)操作的所有开销,这是相当大的杀伤力... -
@ÓscarLópez 好吧,实际上就像在 JDK 1.2 中一样。
标签: java java-8 java-stream