prominent java 8 features with code examples
Una lista completa y una explicación de todas las características destacadas introducidas en la versión Java 8 con ejemplos:
El lanzamiento de Java 8 de Oracle fue un lanzamiento revolucionario de la plataforma de desarrollo número uno del mundo. Incluyó una gran actualización del modelo de programación Java en su conjunto junto con la evolución de la JVM, el lenguaje Java y las bibliotecas de manera coordinada.
Esta versión incluye varias características para facilidad de uso, productividad, programación políglota mejorada, seguridad y rendimiento general mejorado.
programas para monitorear la temperatura de la cpu y gpu
Lo que vas a aprender:
- Funciones agregadas a la versión Java 8
- Interfaces funcionales y expresiones Lambda
- Método forEach () en interfaz iterable
- Clase opcional
- Métodos predeterminados y estáticos en interfaces
- Referencias de métodos
- API Java Stream para operaciones de datos masivos en colecciones
- API Java Date Time
- Motor JavaScript de Rhinoceros
- Decodificación de codificación Base64
- Mejoras en la API de colección
- Cambios / mejoras de la API de simultaneidad
- Mejoras de Java IO
- Mejoras varias de la API principal
- Conclusión
Funciones agregadas a la versión Java 8
Entre los cambios más importantes, se encuentran las características notables que se agregaron a esta versión.
- Interfaces funcionales y expresiones lambda
- método forEach () en la interfaz Iterable
- Clase opcional,
- métodos predeterminados y estáticos en interfaces
- Referencias de métodos
- API Java Stream para operaciones de datos masivos en colecciones
- API Java Date Time
- Mejoras en la API de colección
- Mejoras en la API de simultaneidad
- Mejoras de Java IO
- Motor JavaScript de Rhinoceros
- Decodificación de codificación Base64
- Mejoras varias de la API principal
En este tutorial, discutiremos brevemente cada una de estas características e intentaremos explicar cada una de ellas con la ayuda de ejemplos simples y fáciles.
Interfaces funcionales y expresiones Lambda
Java 8 introduce una anotación conocida como @FunctionalInterface que generalmente es para errores a nivel del compilador. Por lo general, se usa cuando la interfaz que está utilizando viola los contratos de la interfaz funcional.
Alternativamente, puede llamar a una interfaz funcional como interfaz SAM o interfaz de método abstracto único. Una interfaz funcional permite exactamente un 'método abstracto' como miembro.
A continuación se muestra un ejemplo de interfaz funcional:
|_+_|Puede omitir la anotación @FunctionalInterface y su interfaz funcional seguirá siendo válida. Usamos esta anotación solo para informar al compilador que la interfaz tendrá un único método abstracto.
Nota: Por definición, los métodos predeterminados son No abstractos y puede agregar tantos métodos predeterminados en la interfaz funcional como desee.
En segundo lugar, si una interfaz tiene un método abstracto que anula uno de los métodos públicos de 'java.lang.object', entonces no se considera como el método abstracto de la interfaz.
A continuación se muestra un ejemplo de interfaz funcional válido.
|_+_|Una expresión Lambda (o función) se puede definir como una función anónima (una función sin nombre y sin un identificador). Las expresiones Lambda se definen exactamente en el lugar donde se necesitan, generalmente como un parámetro para alguna otra función.
Desde una perspectiva diferente, las expresiones Lambda expresan instancias de Interfaces funcionales (descrito arriba). Las expresiones Lambda implementan la única función abstracta presente en la interfaz funcional y, por lo tanto, implementan interfaces funcionales.
La sintaxis básica de una expresión Lambda es:
Un ejemplo básico de la expresión Lambda es:
La expresión anterior toma dos parámetros xey y devuelve su suma x + y. Según el tipo de datos de xey, el método se puede utilizar varias veces en varios lugares. Por lo tanto, los parámetros xey coincidirán con int o Integer y string, y según el contexto, agregará dos enteros (cuando los parámetros son int) o concatizarán las dos cadenas (cuando los parámetros son una cadena).
Implementemos un programa que demuestre las expresiones Lambda.
|_+_|Producción:
El programa anterior muestra el uso de Lambda Expression para agregar parámetros y muestra su suma. Luego usamos esto para implementar el método abstracto 'abstract_fun' que declaramos en la definición de la interfaz. El resultado de llamar a la función 'abstract_fun' es la suma de los dos enteros pasados como parámetros mientras se llama a la función.
Aprenderemos más sobre Lambda Expressions más adelante en el tutorial.
Método forEach () en interfaz iterable
Java 8 ha introducido un método 'forEach' en la interfaz java.lang.Iterable que puede iterar sobre los elementos de la colección. 'ForEach' es un método predeterminado definido en la interfaz Iterable. Es utilizado por las clases Collection que extienden la interfaz Iterable para iterar elementos.
El método 'forEach' toma la interfaz funcional como un único parámetro, es decir, puede pasar la expresión Lambda como argumento.
Ejemplo del método forEach ().
|_+_|Producción:
Entonces tenemos una colección de temas, es decir, subList. Mostramos el contenido de la subList usando el método forEach que usa Lambda Expression para imprimir cada elemento.
Clase opcional
Java 8 introdujo una clase opcional en el paquete 'java.util'. 'Opcional' es una clase final pública y se utiliza para tratar con NullPointerException en la aplicación Java. Con Opcional, puede especificar códigos o valores alternativos para ejecutar. Al usar Opcional, no tiene que usar demasiadas comprobaciones nulas para evitar nullPointerException.
Puede utilizar la clase Opcional para evitar la terminación anormal del programa y evitar que el programa se bloquee. La clase Optional proporciona métodos que se utilizan para verificar la presencia de valor para una variable en particular.
El siguiente programa demuestra el uso de la clase Opcional.
|_+_|Producción:
En este programa, usamos la propiedad 'ofNullable' de la clase Optional para verificar si la cadena es nula. Si es así, se imprime el mensaje correspondiente al usuario.
Métodos predeterminados y estáticos en interfaces
En Java 8, puede agregar métodos en la interfaz que no son abstractos, es decir, puede tener interfaces con la implementación de métodos. Puede utilizar las palabras clave Default y Static para crear interfaces con implementación de métodos. Los métodos predeterminados habilitan principalmente la funcionalidad Lambda Expression.
Con los métodos predeterminados, puede agregar nuevas funciones a sus interfaces en sus bibliotecas. Esto garantizará que el código escrito para las versiones anteriores sea compatible con esas interfaces (compatibilidad binaria).
Comprendamos el método predeterminado con un ejemplo:
|_+_|Producción:
Tenemos una interfaz llamada 'interface_default' con el método default_method () con una implementación predeterminada. A continuación, definimos una clase 'derivada_clase' que implementa la interfaz 'interface_default'.
Tenga en cuenta que no hemos implementado ningún método de interfaz en esta clase. Luego, en la función principal, creamos un objeto de clase 'derivada_clase' y llamamos directamente al 'método_predeterminado' de la interfaz sin tener que definirlo en la clase.
Este es el uso de métodos predeterminados y estáticos en la interfaz. Sin embargo, si una clase desea personalizar el método predeterminado, puede proporcionar su propia implementación anulando el método.
Referencias de métodos
La función de referencia de método introducida en Java 8 es una notación abreviada para que Lambda Expressions llame a un método de Functional Interface. Por lo tanto, cada vez que use una expresión Lambda para hacer referencia a un método, puede reemplazar su expresión Lambda con una referencia de método.
Ejemplo de referencia de método.
|_+_|Producción:
En este programa, tenemos una interfaz 'interface_default' con un método abstracto 'display ()'. A continuación, hay una clase 'derivada_clase' que tiene un método público 'classMethod' que imprime un mensaje.
En la función principal, tenemos un objeto para la clase, y luego tenemos una referencia a la interfaz que hace referencia a un método de clase 'classMethod' a través de obj1 (objeto de clase). Ahora, cuando la referencia de la interfaz llama a la visualización del método abstracto, se muestran los contenidos de classMethod.
API Java Stream para operaciones de datos masivos en colecciones
Stream API es otro cambio importante introducido en Java 8. Stream API se utiliza para procesar la colección de objetos y admite un tipo diferente de iteración. Una secuencia es una secuencia de objetos (elementos) que le permite canalizar diferentes métodos para producir los resultados deseados.
Un Stream no es una estructura de datos y recibe su entrada de colecciones, arreglos u otros canales. Podemos canalizar varias operaciones intermedias utilizando Streams y las operaciones de la terminal devuelven el resultado. Discutiremos la API de transmisión con más detalle en un tutorial de Java separado.
API Java Date Time
Java 8 introduce una nueva API de fecha y hora en el paquete java.time.
Las clases más importantes entre ellas son:
- Local: API de fecha y hora simplificada sin complejidad en el manejo de la zona horaria.
- Zonificado: API de fecha y hora especializada para tratar con varias zonas horarias.
fechas
La clase de fecha se ha vuelto obsoleta en Java 8.
A continuación se presentan las nuevas clases introducidas:
- La clase LocalDate define una fecha. No tiene representación de hora o zona horaria.
- El LocalTime clase define un tiempo. No tiene representación para la fecha o la zona horaria.
- La clase LocalDateTime define una fecha y hora. No tiene representación de una zona horaria.
Para incluir información de zona horaria con funcionalidad de fecha, puede usar Lambda que proporciona 3 clases, es decir, OffsetDate, OffsetTime y OffsetDateTime. Aquí el desplazamiento de la zona horaria se representa mediante otra clase: 'ZoneId'. Cubriremos este tema en detalle en las últimas partes de esta serie Java.
Motor JavaScript de Rhinoceros
Java 8 introdujo un motor muy mejorado para JavaScript, es decir, Nashorn que reemplaza al Rhino existente. Nashorn compila directamente el código en la memoria y luego pasa el código de bytes a JVM, mejorando así el rendimiento 10 veces.
Nashorn presenta una nueva herramienta de línea de comandos: jjs que ejecuta código JavaScript en la consola.
Creemos un archivo JavaScript 'sample.js' que contiene el siguiente código.
|_+_|Da el siguiente comando en la consola:
C: Java jjs sample.js
software para descargar videos de sitios web
Producción: ¡¡Hola Mundo!!
También podemos ejecutar programas JavaScript en modo interactivo y también proporcionar argumentos a los programas.
Decodificación de codificación Base64
En Java 8 hay codificación y decodificación incorporadas para la codificación Base64. La clase para la codificación Base64 es java.util.Base64.
Esta clase proporciona tres codificadores y decodificadores Base64:
- Básico: En esto, la salida se asigna a un conjunto de caracteres entre A-Za-z0-9 + /. El codificador no agrega ningún avance de línea a la salida y el decodificador rechaza cualquier carácter que no sea el anterior.
- URL: Aquí la salida es la URL y el nombre de archivo seguro se asigna al conjunto de caracteres entre A-Za-z0-9 + /.
- MÍMICA: En este tipo de codificador, la salida se asigna a un formato compatible con MIME.
Mejoras en la API de colección
Java 8 ha agregado los siguientes métodos nuevos a la API de colección:
- forEachRemaining (acción del consumidor): este es un método predeterminado y es para el iterador. Realiza la 'acción' para cada uno de los elementos restantes hasta que todos los elementos se procesan o la 'acción' arroja una excepción.
- El método predeterminado para la colección removeIf (filtro de predicado): Esto elimina todos los elementos de la colección que satisfacen el 'filtro' dado.
- Spliterator (): este es un método de colección y devuelve una instancia de spliterator que puede usar para atravesar los elementos de forma secuencial o paralela.
- La colección de mapas tiene métodos replaceAll (), compute () y merge ().
- La clase HashMap con colisiones de claves se ha mejorado para mejorar el rendimiento.
Cambios / mejoras de la API de simultaneidad
Las siguientes son las mejoras importantes en la API concurrente:
- ConcurrentHashMap se mejora con los siguientes métodos:
- calcular (),
- para cada (),
- forEachEntry (),
- forEachKey (),
- forEachValue (),
- Vamos (),
- reducir () y
- buscar ()
- El método 'newWorkStealingPool ()' para ejecutores crea un grupo de subprocesos que roban el trabajo. Utiliza los procesadores disponibles como su nivel de paralelismo objetivo.
- El método “completableFuture” es el que podemos completar explícitamente (estableciendo su valor y estado).
Mejoras de Java IO
Las mejoras de IO realizadas en Java 8 incluyen:
- Lista de archivos (directorio de ruta): Esto devuelve una secuencia muy poblada, cuyo cada elemento es la entrada en el directorio.
- Files.lines (ruta de acceso): Lee todas las líneas de una secuencia.
- Archivos.find (): Busque archivos en el árbol de archivos que tengan sus raíces en un archivo inicial determinado y devuelva una secuencia poblada por una ruta.
- BufferedReader.lines (): Devuelve una secuencia con todos sus elementos como las líneas leídas desde BufferedReader.
Mejoras varias de la API principal
Tenemos las siguientes mejoras de API misceláneas:
- Método estático conInitial (proveedor proveedor) de ThreadLocal para crear una instancia fácilmente.
- La interfaz 'Comparador' se amplía con los métodos predeterminados y estáticos para el orden natural en orden inverso, etc.
- Las clases de envoltura Integer, Long y Double tienen métodos min (), max () y sum ().
- La clase booleana se ha mejorado con los métodos logicAnd (), logicOr () y logicXor ().
- Se introducen varios métodos de utilidad en la clase de matemáticas.
- Se elimina el puente JDBC-ODBC.
- Se elimina el espacio de memoria de PermGen.
Conclusión
En este tutorial, hemos discutido las principales características que se agregaron a la versión de Java 8. Dado que Java 8 es una versión importante de Java, es importante que conozca todas las funciones y mejoras que se realizaron como parte de esta versión.
Aunque la última versión de Java es la 13, sigue siendo una buena idea familiarizarse con las funciones de Java 8. Todas las características discutidas en este tutorial todavía están presentes en la última versión de Java y las discutiremos como temas individuales más adelante en esta serie.
¡Esperamos que este tutorial le haya ayudado a aprender sobre varias funciones de Java 8!
Lectura recomendada
- Tutorial de longitud de matriz de Java con ejemplos de código
- Java 'this' palabra clave: tutorial con ejemplos de código
- Tutorial de interfaz Java y clase abstracta con ejemplos
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Implementación de Java: creación y ejecución de un archivo JAR de Java
- C ++ Vs Java: Las 30 principales diferencias entre C ++ y Java con ejemplos
- Método MongoDB Sort () con ejemplos
- Explore los conceptos básicos de Java en Selenium con ejemplos