Использование Google Guava для getIfPresent () для поиска по значениям enum - PullRequest
0 голосов
/ 22 февраля 2019
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();
    }

Я только недавно натолкнулся на getIfPresent (), чтобы в основном использовать глобальную статическую карту с именем класса Enum для поиска.Вместо этого у меня есть проблема, я хотел бы использовать свой getter getName () для поиска вместо имени Enum name.В приведенном мною примере, если пользователь введет заполнитель, появятся все три значения.Это достижимо с моим подходом?Я поставил * рядом с моим подходом, который не работает.

1 Ответ

0 голосов
/ 22 февраля 2019

Поскольку вам нужны все соответствующие объекты, но Enums.getIfPresent даст вам только один объект, вы можете легко достичь своей цели, выполнив следующее:

    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;
    }
...