Grouping data by serviceId in Java

In this Java snippet, I demonstrate how to group a list of maps by serviceId, allowing for easy access to related values. I've set up some sample data entries and used a HashMap to organize them efficiently.
 avatar
unknown
java
a month ago
3.4 kB
3
Indexable
import java.util.*;

public class Main {
    public static void main(String[] args) {
        // Verilerinizi ekliyoruz
        List<Map<String, String>> data = new ArrayList<>();
        data.add(createData(43, "CHANNEL", "WEB"));
        data.add(createData(43, "CHANNEL", "WS"));
        data.add(createData(43, "TYPE", "HASAR"));
        data.add(createData(43, "PKG", "BIR"));
        data.add(createData(44, "OPT", "TT"));
        data.add(createData(45, "OP", "VDF"));
        data.add(createData(45, "OP", "TC"));

        // serviceId'ye göre gruplayacağız
        Map<Integer, Map<String, List<String>>> groupedData = new HashMap<>();

        // Veriyi gruplayalım: serviceId -> code -> val listesi
        for (Map<String, String> entry : data) {
            Integer serviceId = Integer.parseInt(entry.get("serviceId"));
            String code = entry.get("code");
            String val = entry.get("val");

            groupedData
                .computeIfAbsent(serviceId, k -> new HashMap<>())
                .computeIfAbsent(code, k -> new ArrayList<>())
                .add(val);
        }

        // Şimdi her serviceId için kombinasyonları bulacağız
        for (Map.Entry<Integer, Map<String, List<String>>> entry : groupedData.entrySet()) {
            Integer serviceId = entry.getKey();
            Map<String, List<String>> codeMap = entry.getValue();

            // Kodlar için kombinasyonları bulalım
            List<List<String>> allCombinations = new ArrayList<>();
            getCombinations(new ArrayList<>(codeMap.values()), 0, new ArrayList<>(), allCombinations);

            // Sonuçları yazdıralım
            for (List<String> combination : allCombinations) {
                String combinedText = buildText(combination, codeMap);
                System.out.println(serviceId + "," + combinedText);
            }
        }
    }

    // Kombinasyonları oluşturmak için yardımcı metot
    private static void getCombinations(List<List<String>> lists, int index, List<String> current, List<List<String>> allCombinations) {
        if (index == lists.size()) {
            allCombinations.add(new ArrayList<>(current));
            return;
        }

        List<String> currentList = lists.get(index);
        for (String value : currentList) {
            current.add(value);
            getCombinations(lists, index + 1, current, allCombinations);
            current.remove(current.size() - 1);
        }
    }

    // Kombinasyonları birleştirip doğru formatta dönen metot
    private static String buildText(List<String> combination, Map<String, List<String>> codeMap) {
        List<String> parts = new ArrayList<>();
        Iterator<String> codeIterator = codeMap.keySet().iterator();

        for (String val : combination) {
            String code = codeIterator.next();
            parts.add(code + ":" + val);
        }

        return String.join("|", parts);
    }

    // Yardımcı metot: Data nesnesi oluşturmak için
    private static Map<String, String> createData(int serviceId, String code, String val) {
        Map<String, String> map = new HashMap<>();
        map.put("serviceId", String.valueOf(serviceId));
        map.put("code", code);
        map.put("val", val);
        return map;
    }
}
Editor is loading...
Leave a Comment