Grouping Data by Service ID in Java
unknown
java
9 months ago
4.0 kB
5
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, "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;
}
}
Editor is loading...
Leave a Comment