Мне удалось успешно загрузить свой ArrayList из значений класса enum. Я не очень хорошо знаком с использованием перечислений, и мне было интересно, есть ли способ справиться с этим, не вводя add для каждого перечисления, как я показал.
public enum PartsOfSpeech {
Adjective("Placeholder [adjective] : To be updated..."),
Adverb("Placeholder [adverb] : To be updated..."),
Conjunction("Placeholder [conjection] : To be updated..."),
Interjection("Placeholder [interjection] : To be updated..."),
Noun("Placeholder [noun] : To be updated..."),
Preposition("Placeholder [preposition] : To be updated..."),
Pronoun("Placeholder [pronoun] : To be updated..."),
Verb("Placeholder [verb] : To be updated...");
private String speechValue;
private PartsOfSpeech(String speechValue) {
this.speechValue= speechValue;
}
public String getSpeechValue() {
return speechValue;
}
}
public class Dictionary {
public static void main(String args[]) {
System.out.println("! Loading data...");
Map<String, List<String>> dictionaryMap = new HashMap<String, List<String>>();
List<String> POSList = new ArrayList<>();
POSList.add(PartsOfSpeech.Adjective.getSpeechValue());
POSList.add(PartsOfSpeech.Adverb.getSpeechValue());
POSList.add(PartsOfSpeech.Conjunction.getSpeechValue());
POSList.add(PartsOfSpeech.Interjection.getSpeechValue());
POSList.add(PartsOfSpeech.Noun.getSpeechValue());
POSList.add(PartsOfSpeech.Preposition.getSpeechValue());
POSList.add(PartsOfSpeech.Pronoun.getSpeechValue());
POSList.add(PartsOfSpeech.Verb.getSpeechValue());
dictionaryMap.put("distinct",POSList);




values() метод возвращает массив значений enum. Вы можете перебрать эти значения, получить значение речи и добавить их в список.
Вот как вы можете сделать это с помощью Stream API:
List<String> POSList = Arrays.stream(PartsOfSpeech.values())
.map(PartsOfSpeech::getSpeechValue)
.collect(Collectors.toList());
И, следуя соглашению об именах Java, это должно быть posList, а не POSList.
Кроме того, что касается соглашения об именах, все константы перечисления должны быть в верхнем регистре.
ОП может избавиться от speechValue и getSpeechValue(), используя ваш код а-ля: List<String> posList = Arrays.stream(PartsOfSpeech.values()).map(pos -> String.format(format, pos.toString().toLowerCase())).collect(Collectors.toList());
ой, забыл формат Строка: String format = "\"Placeholder [%s] : To be updated...\"";
@HovercraftFullOfEels да, это сделает перечисление чище. Но я думаю, что OP изменит часть заполнитель для обновления, поэтому каждая из них имеет свое уникальное значение. Если они этого не делают, то на самом деле это не свойство этого перечисления, и поэтому из него следует полностью удалить речевое значение. Его можно создать динамически (как вы предложили использовать format) при вставке значений в список/карту.
Побочная проблема: это
Adjective("Placeholder [adjective] : To be updated..."),просто не выглядит правильно, поскольку похоже, что вы жестко кодируете детали реализации в модели, перечислении. Вероятно, лучше более простойADJECTIVE("adjective"), ...или что-то подобное. Затем вы создадите свой"Placeholder [%s]: To be updated..."в каком-то более позднем месте, где вы будете отображать информацию для пользователя. В противном случае ваш код станет жестким, и его будет трудно улучшать, обновлять и изменять позже.