通过不区分大小写的元素查找列表中的原始元素



List 有值:

Aa
Bb
CC

我想通过发送不区分大小写的值来获取原始值。例

public class TEST {
    static List<String> list;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        list.add("Aa");
        list.add("Bb");
        list.add("CC");
        //should return Aa
        String originalValue = getOriginalElement("aa");
        //should return Bb
        originalValue = getOriginalElement("BB");
        //should return CC
        originalValue = getOriginalElement("cc");
    }
    static public String getOriginalElement(String caseInsensitiveStr){
        String magic ="";
        // magic happens here
        // magic = 
        return magic;
    }
}

Java 8 流解决方案也受到欢迎

如果您有额外的内存,请添加一些键值存储(甚至HashMap(,其中键是小写字符串,值是原始字符串。

使用 Java 8 流的解决方案:

static public String getOriginalElement(String caseInsensitiveStr){
    return list.stream().filter(
        x -> caseInsensitiveStr.equalsIgnoreCase(x)).findFirst().get();
}

我直言,你需要一个map来做这个神奇的事情,像这样:

static List<String> list;
static Map<String, String> map = new HashMap<>();
/**
 * Launch the application.
 */
public static void main(String[] args) {
    add("Aa");
    add("Bb");
    add("CC");
    //should return Aa
    String originalValue = getOriginalElement("aa");
    //should return Bb
    originalValue = getOriginalElement("BB");
    //should return CC
    originalValue = getOriginalElement("cc");
}
static public void add(String element){
    list.add(element);
    map.put(element.toLowerCase(), element);
}
static public String getOriginalElement(String caseInsensitiveStr){
    return map.get(caseInsensitiveStr.toLowerCase());
}

如果您只想要一个"魔术"代码而没有额外的地图:

static public String getOriginalElement(String caseInsensitiveStr){
    return list.stream().filter(s -> s.equalsIgnoreCase(caseInsensitiveStr)).findFirst().get();
}

最新更新