Сравнивая строку [] со списком объектов с потоком? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть список:

String[] properties = {"prop1","prop2","prop3"};
List<CustomObject> listOfObjects; // contains objects and each object contains a property of `properties` array

class CustomObject{
   String prop1;
   String prop2;
   String prop3;

}

Я хочу проверить каждое properties значение для всех listOfObjects свойств объектов и проверить, является ли значение пустым.Я просто хочу проверить, что ни один из объектов не имеет пустых свойств.

Я знаю, что есть stream(), но я не уверен, как правильно его использовать.

listOfObjects.stream().anyMatch(x -> x.get(/*What do i put in here?*/) == "");

Обновление: вотчто бы в основном работало без stream()

    for(String prop: properties) {
        for(CustomObject pdo: listOfObjects) {
            if(pdo.get(prop) == "") {
                System.out.println("Some of the required fields are empty");
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Просто для использования Streams и anyMatch вы можете использовать эту операцию, чтобы проверить, не являются ли какие-либо из свойств пустыми.Это просто для того, чтобы конкретно ответить на ваш вопрос, я предлагаю потратить некоторое время и улучшить его, так как места много.

listOfObject.stream()
                .anyMatch(obj -> Arrays.stream(obj)
                        .anyMatch(p -> !(obj.get(p)!= null && !obj.get(p).isEmpty())));
0 голосов
/ 22 ноября 2018

Вы можете просто использовать список Predicate с.Каждый из следующих предикатов проверяет одно из свойств на равенство "".

List<Predicate<CustomObject>> propertiesCheckers = 
        Arrays.asList(pdo -> "".equals(pdo.get("prop1")),
            pdo -> "".equals(pdo.get("prop2")),
            pdo -> "".equals(pdo.get("prop3")));

И этот поток проверяет каждый элемент на соответствие предикату, возвращая true при обнаружении первого пустого значения:

boolean anyEmpty = listOfObjects.stream()
        .flatMap(ob -> propertiesCheckers.stream().map(pred -> pred.test(ob)))
        .anyMatch(b -> b); //returns true if any "".equals returned true

if(anyEmpty) System.out.println("Some of the required fields are empty");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...