lambdas
Si no sabe en absoluto qué son las lambdas, entonces: Una lambda tiene este aspecto:(a, b) -> a.compareTo(b)
(переменные) -> действие
Es suficiente por ahora. Puedes leer la teoría aquí: enlace uno , enlace dos , pero creo que la práctica es mucho más divertida. Te sugiero que resuelvas el siguiente problema: Escribe una calculadora usando el método 1. El método debería aceptar 2 valores digitales y algo más. Su código se verá así:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Debe ingresar 3 parámetros en la firma del método calculate
, agregar 1 comando return
y probar la llamada a este método main
. ¿Qué debería poder hacer este método?
- doblar;
- multiplicar;
- dividir;
- sustraer;
- calcular la raíz;
- elevar a una potencia;
- elevar a una potencia la suma de argumentos dividida por el primer número + 117;
- y todas las demás operaciones que se te ocurran.
if-else
;char
como indicador de operación;switch-case
;- y todo lo que se te ocurra.
- Sólo lambdas, la tarea recae en ellos.
inputStream
y no lo es OutputStream
. Es diferente, es más interesante. Las corrientes han reemplazado a los ciclos, no completamente, pero aún así. Se sirven con el lema “no expliques cómo hacerlo, explica qué hacer”. Un pequeño ejemplo de una secuencia:
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);
¿Que está pasando aqui? Agreguemos comentarios:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Comparar con un bucle normal:
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);
}
Cuando lees el código, todo parece aterrador, pero ¿es más fácil con los comentarios? Esto es normal, yo tampoco los entendí durante mucho tiempo. La clave para la comprensión es la práctica. Por lo tanto, comenzamos a leer artículos de terceros y a buscar respuestas a nuestras preguntas, también puedes preguntarlas aquí en los comentarios, no daré una respuesta completa, pero señalaré la dirección. Lista de tareas de JavaRush que creo que son geniales para practicar el streaming:
-
2208: se puede resolver con 1 flujo y 1 retorno, es decir el cuerpo del método comenzará con
return
y luego habrá 1 flujo completo. Omitamos el requisitoStringBuilder
. -
1908: también puedes resolverlo con 1 flujo y 1 retorno. Comenzando con la lectura del archivo. No sé cómo grabar en un archivo mediante transmisiones (si es posible), por ahora lo hacemos manualmente. Aquellos. Abrimos solo 2 transmisiones (consola y escritura en un archivo). Leemos el archivo a través de métodos que nos devolverán una hoja o una secuencia (google y javadoc).
-
1907: en teoría, también se puede resolver en una sola corriente. La entrada a la secuencia es el nombre del archivo, la salida es el número de palabras del mundo.
-
1016 - de una manera ligeramente pervertida, puedes resolverlo en 1 secuencia y 1 retorno;
-
1821 - muy fácil y en 1 corriente y 1 regreso.
Estas 2 tareas le presentarán otro método de transmisión y otro recopilador.
-
1925: puedes obtener una línea con palabras en una secuencia y luego escribirla en un archivo (no sé si es posible escribir en un archivo desde una secuencia)
GO TO FULL VERSION