Значения карты находятся в массиве.Все значения необходимо преобразовать в список и объединить все в виде списка результатов. - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть карта с массивом в качестве значений.Теперь весь этот массив нужно преобразовать в список.наконец, весь список должен быть объединен в единый список.

Доступно сейчас,

Map<String, Class1[]> master_map= new HashMap<>();

Class1 c1 = new Class("Name1", "Address1");
Class1 c2 = new Class("Name2", "Address2");
ClassArray[0] = c1;
ClassArray[1]= c2;
master_map.put("FirstValue", ClassArray);

Class1 c3 = new Class("Name3", "Address3");
Class1 c4 = new Class("Name4", "Address4");
ClassArray[0] = c3;
ClassArray[1]= c4;
master_map.put("SecondValue", ClassArray);}

Теперь я хотел бы получить следующий результат.

List<Class1> result  = new ArrayList<>();
//This above list to be as {c1, c2, c3, c4}

Ожидайте код в java8

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019

Другой пример

    List<Class1> x = new ArrayList<>();
    master_map.forEach((k,v) -> x.addAll(Arrays.asList(v)));
0 голосов
/ 14 февраля 2019

Вам нужно сгладить ваши внутренние массивы в потоке записей:

List<Class1> result = master_map.values()
    .stream()
    .flatMap(Arrays::stream) //use flatMap to flatten nested stream
    .collect(Collectors.toList());
0 голосов
/ 14 февраля 2019

И еще один простой вариант Java 8:

List<Class1> result  = new ArrayList<>();
master_map.entrySet().stream().forEach(element -> {
  result.addAll(Arrays.asList(element.getValue()));
    });
0 голосов
/ 14 февраля 2019

Вы можете перебирать карту, используя набор записей, и для каждого значения (то есть массива) вы можете использовать Arrays.asList, чтобы преобразовать его в список и добавить его в ваш окончательный список.

    Map<String , Integer[]> hm = new HashMap<String,Integer[]>();
    List<Integer> finalList = new ArrayList<Integer>();
    for(Entry<String, Integer[]> entry:hm.entrySet()) {
        finalList.addAll(Arrays.asList(entry.getValue()));
    }

с использованиемпараллельных потоков это можно сделать так:

    Map<String , Integer[]> hm = new HashMap<String,Integer[]>();

    List<Integer> finalList = hm.values().parallelStream().flatMap(Arrays::stream).collect(Collectors.toList())

Это простой пример с целочисленным массивом.Вы можете сослаться на это и прийти к вашему решению.

...