[英]How to check if list has more then 3 elements using Java8
I have a method that accepts a list of object.我有一个接受 object 列表的方法。
I want to iterate through that list and check if the list has more than 3 elements.我想遍历该列表并检查该列表是否包含 3 个以上的元素。 If it does, I want to throw error
You can only add 3 elements
如果是这样,我想抛出错误
You can only add 3 elements
If not, I want to save those elements in database.如果没有,我想将这些元素保存在数据库中。
I want to use Java 8 streams in this case.在这种情况下,我想使用 Java 8 个流。
So far I have this code:到目前为止,我有这个代码:
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());
}
I have tried to use .limit()
but what it does is it takes first 3 objects (if I have sent in 4) and saves them, last one just forgets.我曾尝试使用
.limit()
但它的作用是它需要前 3 个对象(如果我发送了 4 个)并保存它们,最后一个只是忘记了。
What I am trying to achieve is if list is empty return error, if list size is bigger than 3 return error, but using Java 8.我想要实现的是如果列表为空返回错误,如果列表大小大于 3 返回错误,但使用 Java 8。
For a List
just check the size
property.对于
List
,只需检查size
属性。
For a Stream
, you can do:对于
Stream
,您可以执行以下操作:
import java.util.*;
import java.util.stream.*;
class Main {
private static Boolean hasThreeOrMoreElements(final Stream s) {
return s.limit(3).count() >= 3;
}
public static void main(String[] args) {
System.out.println(hasThreeOrMoreElements(Arrays.asList(1).stream()));
System.out.println(hasThreeOrMoreElements(Arrays.asList(1, 2).stream()));
System.out.println(hasThreeOrMoreElements(Arrays.asList(1, 2, 3).stream()));
System.out.println(hasThreeOrMoreElements(Arrays.asList(1, 2, 3, 4, 5, 6).stream()));
}
}
Something like this?像这样的东西?
public List < MyObject > addMyObject(List < MyObject > myObject) {
if (playingStyle.isEmpty()) {
throw new IllegalArgumentException("playingStyle cannot be null");
}
if (myObject.size() > 3)
throw new IllegalArgumentException("You can only add 3 elements");
return myObject.stream()
.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());
}
Also, I would change repository.save(new MyObject(ps.getName(), ps.getAverage(), ps.getPriority()));
另外,我会更改
repository.save(new MyObject(ps.getName(), ps.getAverage(), ps.getPriority()));
to repository.save(ps);
到
repository.save(ps);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.