2016-04-04 4 views
0

Ich habe eine HashMap in meiner GUI Klasse:Suche HasMap Wert für String-Instanz

HashMap<Integer, Party> partyInput = new HashMap<>(); 

und mit einer String Eingabe von Benutzern den Hashmap Wert für seine Instanz suchen. Wie übertrage ich den String auf Party-Objekt oder Party-Objekt auf String? Ich kann den Schlüssel leicht suchen und einige andere Programme haben, die nach Werten von Schnur suchen, aber dieses Szenario nicht herausfinden können. Der Versuch:

// target is the value input from user by JTextField 
if (partyInput.containsValue(target)) { 

    } 

gibt mir "Suspicious Aufruf have.util.Map.containsValue: Gegeben Objekt keine Instanzen von String enthält, kann (voraussichtlich Partei)".

Partei Klasse:

import java.util.ArrayList; 


public class Party extends GameElement{ 

ArrayList<Creature> creature = new ArrayList<>(); 

public Party() { 
    } // end default constructor 

// constructor for all Party member fields 
public Party (int index, String name) { 
    // get fields from parent GameElement class 
    super(index, name); 
} // end Party constructor 


// getter for creature members of each party 
public ArrayList<Creature> getMembers() { 
    return creature; 
} // end getMemebers method 

// setter for creature members of each party 
public void setMembers(ArrayList<Creature> partyMembers) { 
    this.creature = partyMembers; 
} // end setMemebers method 

@Override 
public String toString() { 

    StringBuilder sb = new StringBuilder(); 
    sb.append(String.format("%n**********************************************************")); 
    sb.append(String.format("%nParty: %s%n", getName())); 
    sb.append(String.format("Creatures %n")); 
    creature.stream().forEach((c) -> { 
     sb.append(String.format("**** %s%n", c.getName())); 
    }); 

    return sb.toString(); 
} // end toString method 
} // end Party class 

Jede Hilfe wäre sehr dankbar.

+0

Welche Eigenschaft von 'Party' entspricht dem' target' Wert? –

+0

Was ist 'Party'? Suchen Sie eine bestimmte Eigenschaft von 'Party'? Es wäre einfacher, dir zu helfen, wenn du ein [mcve] miteinschließt. –

+0

Wenn 'Party' Ihre eigene Klasse ist, müssen Sie selbst einen Weg finden, eine passende' Party'-Instanz einer gegebenen Zeichenfolge zu erhalten. Oder post seinen Code, damit wir eine Idee haben, was es ist. – khelwood

Antwort

1

Wenn das target String der Wert einer Eigenschaft von Party ist, müssen Sie nur die für die Instanz mit dem entsprechenden Attribute suchen Werte Karte iterieren, z.B.

for (Party party : map.values()) { 
    if (party.getTarget().equals(target)) { 
    // Do whatever. 
    } 
} 
2

Wenn Sie eine Party Instanz aus einem String konstruieren können dann vielleicht könnten Sie etwas entlang der Linien von tun:

if(partyInput.containsValue(new Party(text)) { 
    // Do something 
} 

Unter der Annahme, equals in geeigneter Weise außer Kraft gesetzt worden ist.

Oder Sie könnten über die eingestellten Werte iterieren und versuchen, nach einer Eigenschaft in Ihrem Party Objekt zu suchen.

for(Party party : m.values()) { 
     if(text.equals(party.getXXX())) { 
      // Do something 
     } 
    }