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 year ago
3.4 kB
12
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