Attualmente sto usando HashMap<String, Integer>
che è pieno di chiavi di tipo String
che sono tutte, diciamo, 5 caratteri lunghi. Come posso cercare una chiave specifica di 4 caratteri o meno, che è parte e all'inizio di alcuni altri tasti e ottenere tutti i riscontri come una raccolta di <Key, Value>
?HashMap <String, Integer> Cerca una parte di una chiave?
risposta
Itera è l'unica opzione a meno che non si crea una struttura di dati personalizzati:
for (Entry<String, Integer> e : map.entrySet()) {
if (e.getKey().startsWith("xxxx")) {
//add to my result list
}
}
Se avete bisogno di qualcosa di più tempo efficiente, allora avresti bisogno di un'implementazione di mappa in cui si traccia questi tasti parziali.
Con HashMap<String, Integer>
è possibile passare solo attraverso keySet()
e fare per String
chiavi e il modello.
Non è possibile farlo tramite HashMap
, è necessario scrivere la propria implementazione per Map
per l'implementazione della ricerca basata sulla lunghezza della stringa in una mappa.
Salvo il caso, cambia i requisiti, usa la chiave con solo 4 caratteri e memorizza gli altri dati in un oggetto in valore. Un'altra opzione è utilizzare un oggetto chiave personalizzato, con metodo hashCode() personalizzato. –
Non consiglierei di far rotolare la propria mappa <>. Probabilmente è eccessivo (e, inoltre, la composizione è spesso migliore dell'eredità). Tuttavia, sono d'accordo sul fatto che la struttura dei dati, così com'è, non è progettata per farlo. –
Non è necessario implementare tutta la mappa. È abbastanza facile aggiungere oggetti extra se si utilizza il modello decoratore. Quindi ad esempio voglio disconnettere ogni chiave aggiunta a una mappa? Bene, eseguo la mia mappa dell'applicazione LoggingMap e quindi devi fornire l'istanza effettiva della mappa che sta per uscire. Ciò funzionerebbe perfettamente in questo caso, tranne che per il logging avresti tenuto traccia delle chiavi che desideri in una lista o qualcosa del genere. – cyborg
Ad esempio:
public static void checkMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey().toLowerCase().contains("YourString"))
}
}
Questo codice stamperà vero per coloro keys
che contengono il tuo substring
.
Ho bisogno di toLowerCase()? Le mie maiuscole sono sensibili al maiuscolo e minuscolo – Machtl
Non lo fai, ma eseguire lowerCase() è sempre una buona pratica;) –
Map<String, Integer> result = new HashMap<String, Integer>;
for(String key : yourMap.keySet()) {
if(key.length() == 4){
result.put(key, yourMap.get(key);
}
}
Dopo l'esecuzione di questo codice si dispone di tutte le coppie chiave/valore con 4 tasti delle lettere in result
.
Prima ottenere la voce impostata sulla hashmap. Scorri il set e controlla la lunghezza di ogni tasto e aggiungilo a una mappa o usalo come vuoi tu.
Sembra un caso d'uso per TreeMap
anziché HashMap
. La differenza è che TreeMap conserva l'ordine. Quindi puoi trovare la tua partita parziale molto più veloce. Non devi passare attraverso l'intera mappa.
controllare questa domanda Partial search in HashMap
Come è stato notato, non c'è un terribilmente efficace * modo di farlo con la datastructure è stato specificato. Tuttavia, se aggiungi un ulteriore Map<Integer, List<String>>
per tenere traccia del mapping dalla lunghezza della stringa alla lista di tutte le chiavi con quella lunghezza, allora sarai in grado di farlo in modo molto efficiente.
* Usando solo la stringa Mappa <, Integer >, si avrebbe bisogno di scorrere l'intera capacità della mappa più grande, mentre l'aggiunta di questa datastructure supplementare imporrebbe un O (1) lookup (supponendo che è stato utilizzato un HashMap) seguito per iterazione attraverso il solo set di risultati, che è il risultato più veloce possibile.
Si può provare questo approccio:
public Map<String,Integer> filterMap(Map<String, Integer> inputMap){
Map<String, Integer> resultHashMap = new HashMap<String, Integer>();
for (String key : inputMap.keySet()) {
if(key.length()==5){
resultHashMap.put(key,inputMap.get(key));
}
}
return resultHashMap;
}
- 1. Cerca un valore per una data chiave in una HashMap
- 2. ArrayList <HashMap <String, String >> per String []
- 3. Impossibile trasmettere HashMap <String, String> a un'interfaccia che estende Map <String, String>
- 4. Get ArrayList <HashMap <String, String >> valori
- 5. Come iterare Arraylist <HashMap <String, String >>?
- 6. Come posso memorizzare HashMap <String, ArrayList <String>> all'interno di un elenco?
- 7. HashMap (chiave: String, valore: ArrayList) restituisce un oggetto anziché ArrayList?
- 8. Verificare l'esistenza di una HashMap chiave
- 9. Convertire una parte di JSON in HashMap usando Jackson ObjectMapper
- 10. È possibile rinominare una chiave Hashmap?
- 11. Cerca in una lista <DataRow>?
- 12. raccolta HashMap <String, Lista <String>> java 8
- 13. Come convertire tutte le proprietà di sistema Java in HashMap <String, String>?
- 14. Memorizzazione una HashMap all'interno di un altro HashMap miglior rendimento
- 15. Cerca una chiave in una serie, in modo ricorsivo
- 16. Può una matrice java essere usato come un HashMap chiave
- 17. Come ottenere la posizione chiave da una HashMap in Java
- 18. Come filtrare i valori "Null" da HashMap <String, String>?
- 19. Implementazione di una HashMap
- 20. String to HashMap JAVA
- 21. Ottieni la chiave da una HashMap utilizzando il valore
- 22. ordinamento HashMap java <String, Integer>. Come ordinarlo?
- 23. Mettere in una mappa <String, ?>
- 24. Come passare una mappa <String, String> con application.properties
- 25. Il tipo di entità "Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin <string>" richiede una chiave da definire
- 26. Convertire una mappa <String, String> a un POJO
- 27. Hibernate chiave esterna con una parte della chiave primaria composita
- 28. Prendi una porzione della lista <string>
- 29. Unisci Map <String, Lista <String> Java 8 Streaming
- 30. Perché una HashMap ripete il codice hash fornito dall'oggetto chiave?
Bisogna scorrere tutta la HashMap, usare 'getKey.length()' e aggiungere o meno (a seconda della condizione) per un 'List <>' –
Hai guardato 'keySet()'? – vikingsteve
E 'troppo difficile da risolvere, se sì per te, allora almeno condividi quello che hai provato finora? –