Список заполнения выражения Java 8 из списка с другим списком внутри - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь достичь лямбда-выражения, избегая этого:

for (OrderEntity o: onEntryL) {
    for(GeoFenceEventEntity g: o.getGeoFenceEvent()){
        if(null != g.getEndAt() && g.getDynamoGeofenceType().equalsIgnoreCase("WAREHOUSE")){
            //all of them, get data
        }
    }
}

А на лямбде пытаюсь что то подобное (с ошибками):

List<OrderEntity> chargingL = onEntryL.stream()
                              .map(o->o.getGeoFenceEvent().stream()
                              .map(g->null != g.getEndAt() && g.getDynamoGeofenceType().equalsIgnoreCase("WAREHOUSE"))
                              .collect(Collectors.toList()));

Ценю любую помощь, с уважением.

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

ОК, обновите для комментария. Если вы берете OrderEntry, если любой GeoFenceEventEntity удовлетворяет вашим условиям, вы можете использовать

List<OrderEntity> chargingL = onEntryL
           .stream()
           .filter(o -> o.getGeoFenceEvent().stream().anyMatch(g -> null != g.getEndAt() && g.getDynamoGeofenceType().equalsIgnoreCase("WAREHOUSE")))
           .collect(Collectors.toList());
0 голосов
/ 22 марта 2019

Я думаю, что вы хотите flatMap с filter.

onEntryL.stream()
        .map(OrderEntity::getGeoFenceEvent)
        .flatMap(e -> e.stream().filter(g -> null != g.getEndAt() && g.getDynamoGeofenceType().equalsIgnoreCase("WAREHOUSE")))
        .flatMap(g -> g.getData().stream())
        .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...