Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Google Guava for getIfPresent()按枚举值搜索_Java_Enums_Guava - Fatal编程技术网

Java 使用Google Guava for getIfPresent()按枚举值搜索

Java 使用Google Guava for getIfPresent()按枚举值搜索,java,enums,guava,Java,Enums,Guava,我最近刚刚遇到getIfPresent,它基本上在枚举类名上键入了一个全局静态映射以进行查找。我遇到的问题是,我想使用getter getName进行查找,而不是使用枚举名的名称。在我提供的示例中,如果用户键入占位符,所有三个值都将显示。用我的方法可以实现吗?我将*放在不起作用的方法旁边。由于您需要所有匹配的对象,但Enum.getIfPresent只提供一个对象,因此您可以通过执行以下操作轻松实现目标: public enum Dictionary { PLACEHOLDER1 ("To be

我最近刚刚遇到getIfPresent,它基本上在枚举类名上键入了一个全局静态映射以进行查找。我遇到的问题是,我想使用getter getName进行查找,而不是使用枚举名的名称。在我提供的示例中,如果用户键入占位符,所有三个值都将显示。用我的方法可以实现吗?我将*放在不起作用的方法旁边。

由于您需要所有匹配的对象,但Enum.getIfPresent只提供一个对象,因此您可以通过执行以下操作轻松实现目标:

public enum Dictionary {
PLACEHOLDER1 ("To be updated...", "Placeholder", "adjective"),
PLACEHOLDER2 ("To be updated...", "Placeholder", "adverb"),
PLACEHOLDER3 ("To be updated...", "Placeholder", "conjunction");

private String definition;
private String name;
private String partOfSpeech;

private Dictionary (String definition, String name, String partOfSpeech) {
    this.definition = definition;
    this.name = name;
    this.partOfSpeech = partOfSpeech;               
}

public String getName() {
    return name;
}

public class DictionaryUser {
    public static Dictionary getIfPresent(String name) {
        return Enums.getIfPresent(Dictionary.class, name).orNull();
    }

    *public static Dictionary getIfPresent(String name) {
        return Enums.getIfPresent(Dictionary.class, name.getName()).orNull();
    }
    public static Dictionary[] getIfPresent(String name)
    {
        List<Dictionary> response = new ArrayList<>(  );

        for(Dictionary d : Dictionary.values())
        {
            if( d.getName().equalsIgnoreCase( name ) )
            {
                response.add(d);
            }
        }
        return response.size() > 0 ?  response.toArray( new Dictionary[response.size()] ) : null;
    }