#java #java-stream
#java #java-stream
Вопрос:
Я новичок в Java stream,
У меня есть список данных, который имеет некоторый приоритет, он выглядит следующим образом
triggerFilterList = [{"id":"1","name":"xyz":"rank":"1","priority":"A-1"},
{"id":"1","name":"xyz":"rank":"1","priority":"A-2"},
{"id":"1","name":"xyz":"rank":"1","priority":"A-3"},
{"id":"1","name":"xyz":"rank":"2","priority":"NA"}]
В настоящее время это то, что я сделал, в этом сценарии я получаю только первый элемент
TriggerEntity triggerEntity = triggerFilterList.stream()
.filter(triggerData -> triggerData.getRank().equalsIgnoreCase(RankCategoryModel.getRank())
.findFirst().orElse(null);
Мне нужно получить данные, которые имеют приоритет 1, если ранг равен 1, если приоритет 1 отсутствует, тогда получите данные приоритета 2, если приоритет 2 отсутствует, тогда получите данные приоритета 3,
В некоторых случаях приоритет будет недоступен.
В этом triggerEntity
мне нужен приоритет данных
Комментарии:
1. Итак, вы хотите отсортировать поток.
2. нет, если доступен приоритет 1, то мне нужна только эта строка
{"id":"1","name":"xyz":"rank":"1","priority":"1"}
если доступен приоритет 2, то мне нужна только эта строка{"id":"1","name":"xyz":"rank":"1","priority":"2"}
3. И вы достигнете этого путем сортировки потока, после чего первым элементом будет тот, который вы хотите.
4. Вы должны отсортировать, взять первую запись из результата и выполнить цикл по списку до приоритета <> предыдущий приоритет.
5. Если возможны значения (1, 2,…. NA), вы можете достичь этого, сравнив лексикографически:
triggerFilterList.stream().min(Comparator.comparing(TriggerEntity::getRank)).orElse(null);
Ответ №1:
Я не уверен, что это то, что вы хотите, но когда я читаю ваше объяснение, звучит примерно так;
triggerFilterList.stream()
.reduce( (trigerredData1, trigerredData2) ->
trigerredData1.rank.equals(trigerredData1.priority) ? trigerredData1 : trigerredData2);