Grouping Data by Service ID in Java
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, "TYPE", "PLAKA")); data.add(createData(43, "PKG", "IKI")); 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, burada alfabetik sıralama ekledik private static String buildText(List<String> combination, Map<String, List<String>> codeMap) { List<String> parts = new ArrayList<>(); // code'ları alfabetik olarak sıralıyoruz List<String> sortedCodes = new ArrayList<>(codeMap.keySet()); Collections.sort(sortedCodes); // Kod sırasına göre val'leri doğru sırayla eşleştiriyoruz Iterator<String> codeIterator = sortedCodes.iterator(); // Kod sırasına göre val'leri eşleştiriyoruz for (String code : sortedCodes) { List<String> values = codeMap.get(code); // values'ı sırasıyla almak için combination'daki elemanları kullanacağız String value = combination.get(sortedCodes.indexOf(code)); parts.add(code + ":" + value); } 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; } }
Leave a Comment