Stream de Java8 es realmente fragante, nunca sabrás si no lo has experimentado

Original: Braces MC (cuenta pública de WeChat: huakuohao-mc). Concéntrese en la programación básica de JAVA y big data, concéntrese en el intercambio de experiencias y el crecimiento personal.

Aunque Oaclela última JDKversión lanzada oficialmente ahora ha llegado JDK14. Pero creo que muchos equipos todavía están en el sistema de producción JDK8, e incluso algunos equipos todavía están JDK7o JDK6. Aunque muchos equipos han actualizado el entorno de producción JDK8, el código sigue siendo un código antiguo, lo que significa que JDK8las nuevas funciones proporcionadas no se utilizan en absoluto .

JDK8Los programadores de llevar una gran cantidad de conveniencia, o incluso permitir a Javalos programadores a seguir Python, Rubypor lo que cuando se ven obligados a lágrima programador también puede estar orgulloso de uno, porque JDK8finalmente comenzó a apoyar el "comportamiento parametrizado", que es, a menudo decimos, puede poner Una función se pasa como parámetro a otra función .

JDK8Los dos cambios más obvios son el comienzo del soporte para Lambdaexpresiones y la Streamtransmisión de colecciones . Ambas características pueden hacer que el código que escribimos sea más elegante, y también nos facilitan la implementación de ciertas funciones. En particular Stream, es súper fácil de usar, rentable y lleva 20 minutos aprenderlo. Puede mejorar la calidad de su código en un grado.

Permítame enumerar algunas escenas simples, dejarle sentir cuán conveniente y elegante es la API Java8proporcionada Stream, puede considerarse como un truco.

El más utilizado en la codificación diaria es la colección. Por ejemplo, podemos consultar cuántos libros se venden en un día desde la base de datos. Generalmente, escribiremos esto List<Book> books = query.find(date);y luego haremos una variedad de operaciones en esta colección para satisfacer las necesidades del nivel de producto.

Escenario 1: imprima los detalles de cada libro.

Antes de JDK8

//打印出每本书的详情
for (Book book : books){
    System.out.println(book.toString());
}
复制代码

Después de usar Stream

//打印每本书详情
books.stream().forEach(book -> book.toString());
复制代码
Escenario 2: seleccione el precio superior a 20 yuanes

Antes de JDK8

List<Book> highPriceBooks = new ArrayList<>();
for (Book book : books){
    if (book.getPrice()>20){
        highPriceBooks.add(book);
    }
}
复制代码

Después de usar Stream

highPriceBooks = books.stream().filter(book -> book.getPrice()>20).collect(Collectors.toList());
复制代码
Escena 3: Ordenar por precio de libro

Antes de JDK8

List<Book> sortBooks = new ArrayList<>();
for (Book book : books){
    Collections.sort(books, new Comparator<Book>() {
        @Override
        public int compare(Book o1, Book o2) {
            if (o1.getPrice() > o2.getPrice()){
                return 1;
            }else if (o1.getPrice() < o2.getPrice()){
                return -1;
            }else {
                return 0;
            }
        }    
     });
}
复制代码

Después de usar Stream

sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice)).collect(Collectors.toList());
复制代码

Si lo desea, puede reversed()revertirlo directamente , así

sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice).reversed()).collect(Collectors.toList());
复制代码
Escena 4: Obtén todos los títulos

Antes de JDK8

List<String> bookNames = new ArrayList<>();
for (Book book : books){
    bookNames.add(book.getName());
}
复制代码

Después de usar Stream

bookNames = books.stream().map(Book::getName).collect(Collectors.toList());
复制代码
Escena 5: Obtenga la suma de todos los precios de los libros.

Antes de JDK8

//计算一天当中卖出的所有书的价格总和。
int totalNum = 0;
for (Book book : books){
    totalNum += book.getPrice();
}
复制代码

Después de usar Stream

totalNum = books.stream().map(Book::getPrice).reduce(0,(a,b)->a+b);
复制代码
Y muchos mas

¿Crees que esa JDK8es la Streamhabilidad? También puede completar el procesamiento de la cadena, como este

//选出价格高于20的两个元素。
books.stream().filter(book -> book.getPrice()> 20).limit(2).collect(Collectors.toList());
复制代码

Además, si desea utilizar su CPU multinúcleo para procesar colecciones en paralelo para mejorar la velocidad de cálculo, JDK8solo necesita llamar al parallelStreammétodo simplemente . Justo así, books.parallelStream().forEach(book -> book.toString());JDK lo ayudará automáticamente con el procesamiento paralelo, no está mal.

De acuerdo, tanto escribir, más habilidades de uso aún tienen que cavar tu propia experiencia, ¡iré al código, adiós! Recuerde una oración, Java8las cosas nuevas proporcionadas, vale la pena estudiar.


Lectura recomendada:

Los programadores de Java deben leer la lista básica de libros, la versión básica

Colección de instrucciones de operación y mantenimiento de Javaer (versión de comida rápida)

Enseñarle a construir un conjunto de plataforma de operación y mantenimiento de búsqueda de registros ELK

Supongo que te gusta

Origin juejin.im/post/5e9672af6fb9a03c5f73fd28
Recomendado
Clasificación