2017-02-10 128 views
2

建模分層數據我有多個客戶端在不同的格式,這是我想要寫一個抽象返回相同的數據給我。使用枚舉在Java中

Client A: { 
    Category_A1: 
     Sub_Category_A1_1, 
     Sub_Category_A1_2 

    Category_B1: 
     Sub_Category_B1_1, 
     Sub_Category_B1_2 
} 

Client B: { 
    Category_A2: 
     Sub_Category_A2_1, 
     Sub_Category_A2_2 

    Category_B2: 
     Sub_Category_B2_1, 
     Sub_Category_B2_2 
} 

這裏客戶端A和B都返回相同的類別'A'和'B',但在響應中使用不同的字符串。

我想抽象Category_A和Category_B這樣Category_A1,Category_A2將映射到Category_A和Category_B1,Category_B2將映射到Category_B。

這同樣適用於 - 行業標準,以及 - 一個類別只能有與之相關聯的子類別的具體名單。我也想抽象子類別,同時保留它屬於哪個類別的信息。

我想用枚舉多個類別映射到一個:

public enum MyCategory { 

MY_CATEGORY_A(new String[]{ CATEGORY_A1, CATEGORY_A2 }), 

MY_CATEGORY_B(new String[]{ CATEGORY_B1, CATEGORY_B2 }); 

private String[] categories; 

Category(String[] categories) { 
    this.categories = categories; 
} 

public MyCategory getMyCategoryFromExternalCategory(final String externalCategory) { 
} 
}; 

什麼我發現很難爲映射的子類別相同的方式,同時維持該類別及其子類別列表之間的關聯。

什麼可以成爲實現這個使用枚舉一個乾淨的方式 - 因爲我沒有狀態,或與我不想使用顯式類這樣做的類別和子類別的任何其他信息。

回答

0

我覺得你需要像地圖< \ Category,List < \ SubCategory >>,其中Category是一個枚舉類型爲Category_A,Category_B。

public enum Category { 
    CATEGORY_A, CATEGORY_B 
} 

和子類別將只是另一個目的是跟蹤的子類別

0

它應該ü的工作。

import java.util.Arrays; 
import java.util.Objects; 

public enum Category { 


MY_CATEGORY_A(new String[]{ "CATEGORY_A1", "CATEGORY_A2" }), 

MY_CATEGORY_B(new String[]{ "CATEGORY_B1", "CATEGORY_B2" }); 

private final String[] categories; 

Category(String[] categories) { 
    this.categories = categories; 
} 

public static Category getMyCategoryFromExternalCategory(String externalCategory) { 

    Objects.requireNonNull(externalCategory); 

    externalCategory = externalCategory.toUpperCase(); 

    { 
     String[] categories = MY_CATEGORY_A.categories; 

     if (Arrays.asList(categories).contains(externalCategory)) return MY_CATEGORY_A; 
    } 

    { 
     String[] categories = MY_CATEGORY_B.categories; 

     if (Arrays.asList(categories).contains(externalCategory)) return MY_CATEGORY_B; 
    } 

    throw new IllegalArgumentException("no such suitable category"); 
} 


public static void main(String[] args) { 

    System.out.println(getMyCategoryFromExternalCategory("category_a1")); 

}