Rzutowanie/konwersja na String

0

Mam problem z próbą rzutowania obiektu na String, próbowałem już chyba każe metody zmiany na Stringa, bład to:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.base/java.lang.String cannot be cast to java.base/java.lang.Integer
Problem w tym że muszę to zrzutować na stringa

TreeMap<String, String> Tree=Tree = new TreeMap<String, String>();
String ElementsOfTree = (Tree.get(i)).toString(); // nie działa
String ElementsOfTree = (String)Tree.get(i);         // nie działa 
itp
.
.
.

Jak należy poprawnie wykonać rzutowanie?

0

Przecież trzymasz String to po co chcesz rzutować String na String?

TreeMap<String, String> Tree = new TreeMap<String, String>();
Tree.put("ala", "ma kota");
String ElementsOfTree = Tree.get("ala");
System.out.println(ElementsOfTree);
0

Chodzi o to żemuszę robić coś w ten deseń

for(int i=0; i< SizeTree; i++)  {
                String ElementsOfTree = (Tree.get(i)).toString();
               /* i tutaj działam na stringu dalej*/
}
             
0

Jeżeli chcesz używać indeksów liczbowych to dlaczego używasz mapy a nie tablicy napisów?

0

Ponieważ potrzebne mi są typy generyczne

2

Brzmi jak problem XY. Opisz pierwotny problem, bo to o co pytasz nie ma większego sensu, mimo że rozwiązanie wygląda tak

String ElementsOfTree = Tree.get(Integer.toString(i));
0

To może coś takiego:

TreeMap<String, String> tree = new TreeMap<>();
tree.put("Ala", "ma kota");
tree.put("Tomek", "ma małpe");
for (Map.Entry<String, String> map : tree.entrySet()){
    String firstElement = map.getKey();
    String secondElement = map.getValue();
    String string = firstElement + " " + secondElement;
    // ...
}

Bo z tego co zrozumiałem to chcesz wartość z mapy zapisać do jednego stringa i potem na nim operować, tak?

0

Problem jest taki że mam mapę zasypaną danymi ;)
Chcę/muszę w pętli "przejść po całej mapie" i sprawdzić czy pierwsza wartość jest równa "null", dlatego chciałem użyć Stringa i posłużyć się

ElementsOfTree.equals("null);

Wszystkie te wartości z "null" muszę wyrzucić, stą taka koncepcja

1

o_O a nie możesz po prostu porównać sobie z null a nie robić jakieś cuda na kiju ze stringami? Poza tym akurat klucz (bo to masz na myśli pisząc "pierwsza wartość"?) w mapie raczej nie będzie nullem. Jeśli jednak chcesz filtrować wartości które nie są null to:

        Map<String, String> mapa = ImmutableMap.<String, String>builder()
                .put("ala", "ola")
                .put("ela", null)
                .build();
        Map<String, String> withoutNulls = mapa.entrySet()
                .stream()
                .filter(entry -> entry.getValue() != null)
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue
                ));
0

A ja dorzucę jeszcze inny sposób, w sumie nie wiem czy polecany czy nie, ale na pewno krótszy (jeśli nie musisz jednak mieć posortowanej mapy):

ConcurrentHashMap<String, String> mapWithoutNulls = new ConcurrentHashMap<>(treeMap);

I to wszystko. Bo Zarówno TreeMap jak i HashMap pozwalają na nullowe klucze i wartości, natomiast ConcurrentHashMap nie pozwala mieć nullowego ani klucza ani wartości.

0

@Pinek no geniusz! Tylko że

  1. To się po prostu skończy NPE, bo "nie pozwalaniem na nullowe klucze/wartości" oznacza że przy próbie ich dodawania poleci NPE.
  2. Właśnie zasugerowałeś zeby zamiast rowerem pojechać do sklepu promem kosmicznym, bo pada a prom ma dach...
0
Shalom napisał(a):

@Pinek no geniusz! Tylko że

  1. To się po prostu skończy NPE, bo "nie pozwalaniem na nullowe klucze/wartości" oznacza że przy próbie ich dodawania poleci NPE.
  2. Właśnie zasugerowałeś zeby zamiast rowerem pojechać do sklepu promem kosmicznym, bo pada a prom ma dach...

@Shalom Okej, co do 1 to się przyznaję bez bicia (nie przetestowałem kodu, myślałem że concurrentHashMap ma w sobie jakąś walidację czy co) ;DD nie licząć tego NPE, to aż taki zły pomysł, że mnie tak shejtowałeś? :(((

1

A w ogóle to wiesz że technicznie, nie ma czegoś takiego jak pierwszy element mapy? Nie ma 100% gwarancji że jak dodasz klucze A, B, C to dostaniesz je w takiej kolejności.

Ps: Chyba tylko jedna implementacja Map<K, V> ma taką cechę.

0

Dzięki chłopaki za rady, chciałem robić ciężko, a zrobiłem lepiej i bez kwadratowej złożoności która miała być pierwotnie.
I dzięki za tak rzeczowe wsparcie, na pewno skorzystam z nich ;)

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