как перебирать Hashmap и создавать комбинации с другими ключами в том же Hashmap для сравнения их объектов - PullRequest
0 голосов
/ 26 июня 2019

Как перебрать Hashmap и создать комбинации с другими ключами в том же Hashmap, чтобы сравнить их объекты

Map<String, Batch> map = new LinkedHashMap<String, Batch>();
map.put(A,batch1);
map.put(B,batch2);
map.put(C,batch3);
map.put(D,batch4);

Мое требование состоит в том, чтобы выполнить итерацию вышеупомянутой хэш-карты и создать комбинации с другими ключами в той же самой хэш-карте и сравнить их объекты, комбинации, упомянутые ниже. AB, AC, AD, ABC, ABD, ACD, ABCD, BC, BD, BCD, CD

Я попробовал следующий подход, но я могу получить комбинации для двух наборов предметов (AB, AC, AD, BC, BD и CD)

создан дубликат хеш-карты с одинаковыми значениями Map mapDuplicate = new LinkedHashMap ();

for (String item : map.keySet()){
 for (String item2 : mapDuplicate.keySet()){
 if(item != item2){
        compare batches and do stuff...............
    }
   }    
    mapDuplicate.remove(item);
 }

Пожалуйста, предложите лучшее решение / алгоритм / ссылку для обработки вышеуказанного сценария?

1 Ответ

0 голосов
/ 26 июня 2019

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Scratch {
    static List<String> list = Arrays.asList("A", "B", "C", "D");

    public static void main(String[] args) {
        List<String> result = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            result.addAll(restList(list.get(i), list.subList(i + 1, list.size())));
        }
        System.out.println(Arrays.toString(result.toArray()));
    }

    static List<String> restList(String input, List<String> inputList) {
        List<String> restList = new ArrayList<>();
        for (int i = 0; i < inputList.size(); i++) {
            String x = input + inputList.get(i);
            restList.add(x);
            restList.addAll(restList(x, inputList.subList(i + 1, inputList.size())));
        }
        return restList;
    }
}

Если вы запустите вышеуказанные коды, вы получите список с элементами:

[AB, ABC, ABCD, ABD, AC, ACD, AD, BC, BCD, BD, CD]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...