Получить значения из списка карт, используя потоки - PullRequest
0 голосов
/ 28 августа 2018

У меня есть список карт: List<Map<String, Object>>

Карты состоят из ключей name и position.

Мне нужно получить все значения ключа position со всех карт списка.

В настоящее время у меня есть это:

public List<String> getPositions() {
    List<String> positions = new ArrayList<>();
    list.forEach( map -> {
        for ( Entry<String, Object> entry : map.entrySet() )
            if ( entry.getKey().toString().equals( "position" ) )
                positions.add( entry.getValue().toString() );
    } );
    return positions;
}

Можно ли сделать это быстрее с Java Stream?

1 Ответ

0 голосов
/ 28 августа 2018

Насколько я понимаю ваш вопрос, я предполагаю, что list имеет следующую структуру:

List<Map<String, Object>> listOfMap = new ArrayList<>();

И любое число этих Map s в list может иметь ключ "position", который вы хотите использовать для извлечения значения. Использование:

List<String> positions = listOfMap.stream()                         // Stream
                                  .map(map -> map.get("position"))  // Get from map a value by key
                                  .collect(Collectors.toList());    // Collect to List

Я хотел бы добавить, что Stream-API определенно не является заменой for-loops, как вы указали во фрагменте. Как гласит документация , он должен быть без логического вывода и без сохранения состояния . Таким образом, замена for-loop добавления элемента в другом месте с использованием Stream не является хорошей идеей - вам нужно найти другой путь.

...