Un modo semplice per raggruppare oggetti in Java
Fonte: Dev.to In questo esempio, impareremo come semplificare il raggruppamento per oggetti Map che contengono raccolte come valori. Ad esempio, abbiamo un oggetto Map in cui la chiave è un numero intero e i valori sono un array di stringhe:Grouper<Integer, String> grouper = new ArrayListGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
Risultato:
{1=[a, b, c, c], 2=[c]}
Tutto quello che dobbiamo fare è definire la strategia di raggruppamento. Ad esempio, la classe ArrayListGrouper già definita utilizza ArrayList come strategia . Possiamo sempre definire un nuovo Grouper che utilizzerà un GroupingStrateg diverso . Ora cambiamo ArrayList in HashSet per rendere unici gli elementi:
public class HashSetGrouper<K, V> extends Grouper<K, V> {
public HashSetGrouper() {
super(HashSet::new);
}
}
Quindi testiamo:
@Test
public void testHashSetGrouper() {
Grouper<Integer, String> grouper = new HashSetGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
System.out.println(grouper);
}
Risultato:
{1=[a, b, c], 2=[c]}
La chiave 1 ora ha un set in cui il valore c non viene ripetuto. Il codice di esempio è pubblicato su Github .
Metodo charAt(): come usarlo in Java
Fonte: FreeCodeCamp Il metodo charAt() in Java restituisce il valore del carattere char in una stringa in un indice dato o specificato. Oggi vedremo come utilizzare il metodo charAt() , iniziando dalla sua sintassi, per poi vedere alcuni esempi e casi d'uso.Come utilizzare il metodo Java charAt()
Ecco come appare la sintassi del metodo charAt() :public char charAt(int index)
Tieni presente che i caratteri restituiti da una stringa utilizzando il metodo charAt() sono del tipo di dati char . Vedremo tra poco come ciò influisce sulla concatenazione dei valori restituiti. Ora diamo un'occhiata agli esempi:
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
System.out.println(greetings.charAt(0));
// H
}
}
Nel codice sopra, la nostra stringa, memorizzata in una variabile chiamata Greetings , dice "Hello World". Abbiamo utilizzato il metodo charAt() per ottenere il carattere all'indice 0. Quel carattere è la lettera H. Il primo carattere sarà sempre all'indice 0, il secondo all'indice 1 e così via. Anche lo spazio tra le sottostringhe è considerato un indice. Nell'esempio seguente vedremo cosa succede quando proviamo a connettere diversi caratteri restituiti. Concatenazione significa unire due o più valori insieme (nella maggior parte dei casi, il termine viene utilizzato per connettere caratteri o sottostringhe in una stringa).
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(0); // H
char ch2 = greetings.charAt(4); // o
char ch3 = greetings.charAt(9); // l
char ch4 = greetings.charAt(10); // d
System.out.println(ch1 + ch2 + ch3 + ch4);
// 391
}
}
Utilizzando il metodo charAt() , abbiamo ottenuto i caratteri con indici 0, 4, 9 e 10, che sono rispettivamente le lettere H, o, l e d. Abbiamo quindi provato a stampare e collegare questi caratteri:
System.out.println(ch1 + ch2 + ch3 + ch4);
Ma invece di restituire “Hold”, abbiamo ottenuto 391. Questo perché i valori restituiti non sono più stringhe, ma sono di tipo char . Quindi quando li concateniamo, l'interprete aggiunge invece il loro valore ASCII. H ha un valore ASCII di 72, o ha un valore di 111, l ha un valore di 108 e d ha un valore di 100. Se li sommiamo insieme, otteniamo 391, che è stato restituito nell'ultimo esempio.
Errore StringIndexOutOfBoundsException
Quando passiamo un numero di sequenza maggiore del numero di caratteri nella nostra stringa, riceviamo un errore StringIndexOutOfBoundsException nella console. Questo errore si applica anche all'utilizzo dell'indicizzazione negativa, che non è supportata in Java. Nei linguaggi di programmazione come Python che supportano l'indicizzazione negativa, il passaggio di -1 ti darà l'ultimo carattere o valore nel set di dati, in modo simile a come 0 restituisce sempre il primo carattere. Ecco un esempio:public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(20);
System.out.println(ch1);
/* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
*/
}
}
Nel codice sopra abbiamo passato l'indice 20: char ch1 = Greetings.charAt(20); , che supera il numero di caratteri nella nostra variabile di saluto , quindi abbiamo ricevuto un errore. Puoi vedere il messaggio di errore commentato nel blocco di codice sopra. Allo stesso modo, se passiamo un valore negativo come questo: char ch1 = Greetings.charAt(-1); , otteniamo un errore simile.
GO TO FULL VERSION