как мы можем идентифицировать объект Map на основе аргументов его типа по аргументам типа? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть List объектов.Некоторые объекты Map<String, String>, а другие Map<String, List<String>> типов.Мне нужно сгруппировать их в разные списки.

Пожалуйста, скажите мне, если есть какие-либо методы для решения этих проблем.

1 Ответ

0 голосов
/ 12 сентября 2018

Это выглядело как забавный вызов кода.Я написал небольшой Java-класс, демонстрирующий, как вы можете использовать оператор instanceof для разделения этих значений на отдельные коллекции.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Scratch {
    public static void main(String[] args) {
        // test data
        List<Map<String, ?>> mixed = new ArrayList<>();
        Map<String, String> strings = new HashMap<>();
        strings.put("x", "y");
        Map<String, List<String>> lists = new HashMap<>();
        List<String> list = new ArrayList<>();
        list.add("z");
        lists.put("w", list);

        mixed.add(strings);
        mixed.add(lists);

        // split out data
        Map<String, String> onlyStrings = new HashMap<>();
        Map<String, List<String>> onlyLists = new HashMap<>();
        for (Map<String, ?> item : mixed) {
            for (Map.Entry<String, ?> entry : item.entrySet()) {
                Object value = entry.getValue();
                if (value instanceof String) {
                    onlyStrings.put(entry.getKey(), (String)entry.getValue());
                } else if (value instanceof List) {
                    onlyLists.put(entry.getKey(), (List<String>)entry.getValue());
                }
            }
        }

        // print out
        System.out.println("---Strings---");
        for (Map.Entry<String, String> entry : onlyStrings.entrySet()) {
            System.out.println(entry);
        }

        System.out.println("---Lists---");
        for (Map.Entry<String, List<String>> entry : onlyLists.entrySet()) {
            System.out.println(entry);
        }
    }
}

Вывод

---Strings---
x=y
---Lists---
w=[z]

Надеюсь, это поможет вампосле

...