HashMap zdefiniowana z kluczami i z wartościami jako null. Jak dodać wartości do kluczy?

0

Hej,

Mama taki kod:

Map<String, String> conjugatedForms = new HashMap<>();

		conjugatedForms.put("yo/I", null);
		conjugatedForms.put("tú/You", null);
		conjugatedForms.put("él, ella, Ud./He/She/It", null);

		conjugatedForms.put("nosotros/We", null);
		conjugatedForms.put("vosotros/You", null);
		conjugatedForms.put("ellos, ellas, Uds./They", null);

		if (word.endsWith("ar"))
		{

			for (String ending : endingsAr)
			{

				String root = word.substring(0, word.length() - 3);
				String conjugatedVerb = root + ending;
				for (Entry<String, String> entry : conjugatedForms.entrySet())
				{

					conjugatedForms.putIfAbsent(entry.getValue(), conjugatedVerb);

				}

			}

		}

		System.out.println(conjugatedForms);

Jak dodać do kluczy wartości?
Same wartości zależą od tego, co wprowadzi użytkownik.
Gdześ na StackOverflow czytałem, że nie jest dobrą praktyką ustawiać wartośći na null,
ale nie mam pomysłu jak to zrobić zgrabnie.
Macie jakieś podpowiedzi?
Cała koncepcja jest zła?

Pozdrawiam

0

Napisz nam co chcesz osiągnąć tak w ogóle, bo to co robisz to jakiś cięzki WTF.
Bo po nazwach zmiennych to bym myslał że to jakiś Stemmer / Lematyzer ma być, ale po wartościach w mapie to do d**y nie podobne...

0

Na szybko robisz to po prostu, najzwyczajniej w świecie:

conjugatedForms.put(entry.getValue(), conjugatedVerb);

put() nadpisze istniejącą wartość przypisaną do klucza, jeśli takowy już istnieje.

Oddzielna sprawa jest taka, że robienie tego na "gołej" mapie nie wydaje mi się zbyt dobrym pomysłem. Opakuj to jakoś, bo operując na gołych mapach i stringach szybko się pogubisz... albo pogubi się ktoś, kto będzie musiał to po Tobie dalej rozwijać.

1

Napisz nam co chcesz osiągnąć tak w ogóle, bo to co robisz to jakiś cięzki WTF.

Program do odmiany czasowników. Wyciąłem tylko kawałek kodu, wiem, że nic nie wart,
bo też oderwany od reszty, więc wygląda jeszcze gorzej i nie ma sensu.

ale po wartościach w mapie to do d**y nie podobne...

Twórcza krytyka zasłużona w tym przykładzie, ale forma bardzo "uprzejma", dziękuję.

Oddzielna sprawa jest taka, że robienie tego na "gołej" mapie nie wydaje mi się zbyt dobrym pomysłem. Opakuj to jakoś, bo operując na gołych mapach i stringach szybko się pogubisz... albo pogubi się ktoś, kto będzie musiał to po Tobie dalej rozwijać.

Dzięki, co byś proponował w tym miejscu?

0

Myślę, że mogłoby to być coś na kształt tego, co poniżej. Forma pseudokodwa, bo i też nie wiem dokładnie co Twój program ma jeszcze robić, ale mam nadzieję, że podsunie Ci kilka pomysłów na organizację kodu:

public enum PersonalPronoun {
  YO("yo"), TU("tu"), EL("el/ella/usted"), NOSOTROS("nosotros, nosotras"), VOSOTROS("vosotros/vosotras"), ELLOS("...");
  // tu obsługa argumentu konstruktora
}

public class ConjugationPattern {
    private final EnumMap<PersonalPronoun, String> endings;
    public boolean matches(String verb) {
        ...
    }

    public ConjugatedVerb inflect(String indefiniteVerb) {
       ...
    }
}

public class ConjugatedVerb {
    private final EnumMap<PersonalPronoun, String> forms;
    private final ConjugationPattern pattern;

    ...
}

Pobaw się trochę tą koncepcją. Zauważ, jak łatwo wtedy jest opisać problem znalezienia odmiany danego czasownika:

private final Set<ConjugationPattern> patterns;

public ConjugatedVerb findConjugation(String indefiniteVerb) {
    for (ConjugationPattern pattern: patterns) {
        if (pattern.matches(indefiniteVerb)) {
            return pattern.infject(indefiniteVerb);
        }
    }
    throw new IllegalArgumentException(indefiniteVerb + "?!");
}

Pisałem kiedyś parser języka esperanto i podzieliłem sobie wszystko na różne takie mniejsze kawałki, coś w stylu tego co powyżej. Dzięki temu mogłem je testować automatycznie i gdy przyszło do pisania trudniejszych algorytmów, mogłem je sobie składać z już przygotowanych wcześniej klocków. Efektem końcowym był system, który potrafił zrobić dokładną analizę gramatyczną zdania w esperanto.

0

Dzięki, pomysł z enum fajnie wygląda, nie przyszło mi to nawet do głowy.
Popatrzę jeszcze dokładniej na ten kod i pomyślę nad swoim.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1