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.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