2015-08-19 2 views
1

Я пытаюсь достичь следующих целей: Учитывая список объектов. Верните исходный 5 объектов, которые соответствуют критериям.Java 8 необязательный список

Я могу первый элемент:

optionServiceObject.map((p) -> (List<ServiceAttribute>) p.getFoor()) 
        .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar()) 
        .map(v3 -> v3.getBar()) 
        .findFirst() 

Но не смог получить, как получить начиная с 5 элемента, соответствующего критериям в список.

+0

«Возвращение запуска 5 объектов, которые выполняют критерии.» какие критерии? ваш код неясен ... – alfasin

+0

Критерии уже включены в код. Объект имеет hasBar() как true. –

+0

Вместо '.findFirst()' try' .limit (5) ' – alfasin

ответ

2

Если вы хотите, чтобы получить объект номер 5, пропустить первые четыре объекта с skip(4):

Optional<Bar> fifthObject = optionServiceObject 
        .map((p) -> (List<ServiceAttribute>) p.getFoor()) 
        .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar()) 
        .map(v3 -> v3.getBar()) 
        .skip(4) 
        .findFirst(); 

Результат будет пустым, если у вас меньше, чем 5 объектов, соответствующих.

Если вы хотите получить в большинстве 5 объектов сопоставления, используйте limit(5) и собрать результаты в List:

List<Bar> fiveObjects = optionServiceObject 
        .map((p) -> (List<ServiceAttribute>) p.getFoor()) 
        .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar()) 
        .map(v3 -> v3.getBar()) 
        .limit(5) 
        .collect(Collectors.toList()); 
+1

Я хочу достичь второго варианта использования. Но это дает «несоответствие типа: невозможно преобразовать из опционного в \t Список « –

+0

Попробуйте приклеить .map (поток :: of) .orElseGet (поток :: пустой) .collect (Collectors.toList()); до конца, чтобы вернуться к lsit –

Смежные вопросы