J'ai une instruction switch qui traverse un fichier json et fait des choses différentes en fonction de l'attribut dans le fichier. Par exemple:Java 8 refactor instruction switch qui fait des choses différentes pour chaque cas
dataMap.forEach((k, v) -> {
Product product = new Product();
ProductLine productLine = new ProductLine();
Vendor currentVendor = new Vendor();
// Step over each atttribute in the line of the file
v.forEach((k2, v2) -> {
switch(k2) {
case "Product Class": {
Set<ProductCategory> categories = new HashSet<>();
try {
List<String> categoryList = Arrays.asList(v2.split(","));
categoryList.forEach(it ->{
ProductCategory category = ProductCategory.loadTypeByValue(it.trim());
categories.add(category);
});
product.setProductCategories(categories);
} catch (Exception e) {
//
}
break;
}
case "Product Name": {
product.setName(v2);
productLine.setName(v2);
break;
}
case "SKU": {
product.setSKU(v2);
break;
}
case "Name": {
vendor.setName(v2);
}
....
Étant donné que ces déclarations de cas de travail avec des objets différents (Product
, ProductLine
et Vendor
), et chaque cas nécessite parfois un Producer
, Consumer
ou Function
interface, comment puis-je factoriser le commutateur entier (de préférence en utilisant Lambdas de quelque sorte)? J'ai pensé à utiliser une carte, avec la clé étant le cas, comme "Classe de produit", mais quelle serait la valeur?
Map <String, ?> = new HashMap<>();
Merci pour toute aide!
Tu ne peux pas créer une classe qui reflète la structure JSON et analyser juste l'entrée? – PanBrambor