Lambda
Se non sai cosa sono i lambda, allora: Un lambda assomiglia a questo:(a, b) -> a.compareTo(b)
(переменные) -> действие
Per ora basta. Puoi leggere la teoria qui: link uno , link due , ma penso che la pratica sia molto più divertente. Ti suggerisco di risolvere il seguente problema: Scrivi una calcolatrice utilizzando il metodo 1. Il metodo dovrebbe accettare 2 valori digitali e qualcos'altro. Il tuo codice sarà simile a questo:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
È necessario inserire 3 parametri nella firma del metodo calculate
, aggiungere 1 comando return
e provare a chiamare questo metodo in main
. Cosa dovrebbe essere in grado di fare questo metodo?
- piega;
- moltiplicare;
- dividere;
- sottrarre;
- calcolare la radice;
- elevare a potenza;
- eleva a potenza la somma degli argomenti divisa per il primo numero + 117;
- e tutte le altre operazioni che ti vengono in mente.
if-else
;char
come indicatore di funzionamento;switch-case
;- e tutto ciò che ti viene in mente.
- Solo lambda, il compito spetta a loro.
inputStream
e non lo è OutputStream
. È diverso, è più interessante. I flussi hanno sostituito i cicli, non completamente, ma comunque. Viene servito con il motto “non spiegare come farlo, spiega cosa fare”. Un piccolo esempio di flusso:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Cosa sta succedendo qui? Aggiungiamo commenti:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Confronta con un ciclo normale:
List<String> toSort = new ArrayList<>();
for(String s : myList){
if(s.startsWith("c")){
toSort.add(s.toUpperCase());
}
}
Collections.sort(toSort);
for(String s : toSort){
System.ouy.println(s);
}
Quando leggi il codice, tutto sembra spaventoso, ma è più facile con i commenti? Questo è normale, non li ho capiti neanche io per molto tempo. La chiave per comprendere è la pratica. Iniziamo quindi a leggere articoli di terze parti e cerchiamo risposte alle nostre domande, potete farle anche qui nei commenti, non darò una risposta completa, ma indicherò la direzione. Elenco delle attività di JavaRush che ritengo ottime per esercitarsi nello streaming:
-
2208 - può essere risolto con 1 flusso e 1 ritorno, ovvero inizierà il corpo del metodo
return
e poi ci sarà 1 intero flusso. Tralasciamo il requisitoStringBuilder
. -
1908 - puoi anche risolverlo con 1 flusso e 1 ritorno. A partire dalla lettura del file. Non so come registrare su un file tramite stream (se è possibile), per ora lo facciamo manualmente. Quelli. Apriamo solo 2 flussi (console e scrittura su file). Leggiamo il file attraverso metodi che ci restituiranno un foglio o uno stream (google e javadoc).
-
1907 - in teoria può essere risolto anche in un unico flusso. L'input nel flusso è il nome del file, l'output è il numero di parole mondo.
-
1016 - in modo leggermente perverso, puoi risolverlo in 1 flusso e 1 ritorno;
-
1821 - molto facile e in 1 flusso e 1 ritorno.
Queste 2 attività ti introdurranno a un altro metodo di streaming e a un altro raccoglitore.
-
1925: puoi ottenere una riga con parole in un flusso e poi scriverla in un file (non so se sia possibile scrivere su un file da un flusso)
GO TO FULL VERSION