Pierwiastek_z_Czech
#programowanie #naukaprogramowania #java #informatyka
Mam kolekcję HashSet, w której przechowuję obiekty jednej klasy, zawierającej pole "nazwa". Potrzebuję zrobić tak, żeby dodając do kolekcji kolejny obiekt o nazwie identycznej z obiektem już istniejącym w kolekcji, ten nowy zastępował stary (lub przynajmniej się nie dodawał). Jak to wykonać?
1
  • Najlepsze
  • Wszystkie komentarze
ania-nowak1231
@Pierwiastek_z_Czech:
Się nie dodawał -> nadpisz equals, żeby porównywał tylko nazwa.
Zastępował stary -> użyj Map
10
afe1
@ania-nowak1231: to za mało, bedzie dzialac tylko gdy:
1.

Obj a = new Obj("A"):
3
kaervek
@Pierwiastek_z_Czech : ustaw sobie booleana, w while'u zrób fora, który sprawdza czy addedObject.getName.equals(Object.getname), jeśli tak to ustaw odpowiednio bool, żeby nie dodawał, po skończeniu obiegu fora, ale jeszcze w while'u dodaj ifa z tym boolem ustawionego tak, żeby dodał obiekt do setu

to jakieś zadanie rekrutacyjne? bo przyznam, że problem wygląda bardzo znajomo:)
1
Pierwiastek_z_Czech
@kaervek: Zadanie na laborki na studiach. Niestety ta metoda, którą zasugerowałeś nie jest tym, o co mi chodzi - musi to się opierać bardziej na metodach kolekcji, a nie na łataniu ifami czy pętlami
0
k.....l
k.....l
@Pierwiastek_z_Czech: A to musi koniecznie być HashSet?
0
k.....l
k.....l
set.removeIf(o -> o.getName().equals(object.getName()));
set.add(object);

a tak można? Najpierw usuniesz wszystkie obiekty o takim polu, a później dodasz nowy.

Nie wiem, czy rozumiem to zadanie :D
0
akurczak
@Pierwiastek_z_Czech: Jeśli nie chcesz, żeby equals porównywał tylko po nazwie, jak radzi @ania-nowak1231 to możesz użyć TreeSet z Comparatorem po nazwie:

Set set = new TreeSet<>(Comparator.comparing(s -> s.getName()));
0
deemer
deemer
@Pierwiastek_z_Czech: trzymając się HashSeta, jeśli zawsze chcesz zastępować stary obiekt na nowy oprócz dwóch wcześniej wymienionych metod nadpisz również add z HashSeta by np. stary najpierw był usuwany http://pastebin.com/QZqZK05A
0