Взять пары ключ-значение из списка <Object>и добавить в новый список <Object> - PullRequest
2 голосов
/ 17 июня 2020

У меня есть List<Object>, содержащий объекты с парами «ключ-значение». Я хочу l oop, и если значение ключа содержит определенное значение. Я хочу вытащить этот объект и создать новый List<Object> только с этими значениями. Как я мог это сделать?

 for (int i = 0; i < dbResults.size(); i++) {
            Map<String, Object> map = (Map<String, Object>) dbResults.get(i);
            for (String key : map.keySet()) {
            System.out.println("Key: " + key + " maps to value: " + map.get(key));
            }
       }

enter image description here

1 Ответ

1 голос
/ 17 июня 2020

Если вам разрешено использовать потоки, вы можете использовать следующий фрагмент кода:

String valueToSearch = "ronseal";

List<Object> list = dbResults.stream()
                             .filter(i -> (i instanceof Map)) // filter out non-maps (optional step)
                             .map(i -> (Map<String, Object>) i) // convert objects to maps
                             .flatMap(m -> m.values().stream()) // merge values from maps into single stream
                             .filter(e -> e.equals(valueToSearch)) // filter by the given value
                             .collect(Collectors.toList()); // get new list

list.forEach(System.out::println);

//------
// in case you need to get list of maps
List<Map<String, Object>> listMaps = dbResults
    .stream()
    .map(i -> (Map<String, Object>) i)
    .filter(m -> m.containsValue(valueToSearch))
    .collect(Collectors.toList());

listMaps.forEach(System.out::println);

Вывод:

ronseal

{test=@newbayfox, Tag=ronseal, str_id=14753491397}
...