2011-08-30 35 views
2

我有一個數組,我可以從中獲取字符串名稱。比較字符串與多個字符串(最佳數據結構)

arr[i].getName(); 

我想辦法與此相比,一些字符串我現在有他們他們在一個枚舉如下:

public enum BlockManValEnum { 

    SecurityID("SecurityID"), 
    BlockStatus("BlockStatus"), 
    Side("Side"), 
    GTBookingInst("GTBookingInst"); 

    private String name; 

    private BlockManValEnum(String name) { 
     this.name = name; 
    } 

    public String toString() { 
     return this.name; 
    } 


} 

我想要的方式來檢查元素的數組,如果它匹配其中一個屬性,然後執行額外的功能,如果它不匹配不擔心它。我知道枚舉是完全錯誤的方式來存儲這個。

但是,我能想到的唯一方法是用String鍵創建一個只返回一個真正的布爾值的地圖。 (這似乎有點骯髒)

回答

2
public enum BlockManValEnum { 

    SecurityID("SecurityID"), 
    BlockStatus("BlockStatus"), 
    Side("Side"), 
    GTBookingInst("GTBookingInst"); 

    private static Set<String> names = new HashSet<String> {{ 
     for(BlockManValEnum e : BlockManvalEnum.values()) { 
     add(e.toString()); 
     } 
    }}; 

    private static boolean contains(String name) { 
     return names.contains(name); 
    } 

    private String name; 

    private BlockManValEnum(String name) { 
     this.name = name; 
    } 

    public String toString() { 
     return this.name; 
    } 
} 

這裏是你如何使用這個:

if (BlockManValEnum.contains(arr[i].getName())) { 
    // some extra functionality... 
} 
3

而不是使用Map映射到一個真正的Boolean,你可以只使用Set,並檢查你的元素是否在它。 [並激活功能,如果它是]

1

你近...一個沒有值的地圖叫做Set。使用HashSet。 Set有一個「boolean contains()」方法,這就是你想要的。