2017-02-10 87 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")); 

}