简体   繁体   English

如何使用Java8检查列表是否有超过3个元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM