en Java8

De undraw

prefacio

Proyecto Java8 uso ocasional, para entender algunas uso básico, pero no tienen tiempo para aprender el sistema, por lo que algunos del concepto bastante vago, no un conocimiento profundo, puso recientemente algunos tutoriales y libros observó con detenimiento, de repente se sintió mucho antes algunos no entienden el concepto también a resolver, aquí resumió.

La programación funcional (por declaración, en lugar de proceso)

En Java8, verá un montón de estilo similar al siguiente código: el uso de expresiones Labmda. La redacción es un estilo declarativo de la escritura: decirle a la computadora qué hacer, en lugar de cómo hacerlo.

//我们通过函数声明式的过滤出我们想要的结果。而不是在写个for循环做条件判断,然后筛选结果(过程式)
Arrays.asList(1, 3, 4, 5, 10).stream().filter(v -> v > 5).collect(Collectors.toList());
复制代码

interfaz para funciones

Sólo un método abstracto, puede tener múltiples implementación por defecto de la interfaz. Una interfaz de la función se define como sigue:

@FunctionalInterface //添加这个注解后,编译器会检查当前的接口是否符合函数接口规范
public interface Formula {
    double calucalte(int value);

    default int sum(int v1, int v2) { //默认实现方法,当实现接口时可以不实现
        return v1 + v2;
    }

    default double maxValue(Double... values) {//计算所给参数的最大值
        return Arrays.stream(values).max(Double::compareTo).orElse(0.0);
    }
}

复制代码

El método de interfaz por defecto

  • ¿Por qué necesita esta característica

Interfaz antes que los beneficios son más que por defecto de programación específico es que cuando se tiene que modificar la interfaz, la necesidad de modificar la clase de interfaz damos cuenta orientado-abstracto. Para la versión ha sido puesto en libertad, no hay manera no afecta a las implementaciones existentes en la adición de nuevos métodos en la interfaz al mismo tiempo. Creo que es una buena explicación aquí: enlace

Las expresiones lambda

  • ¿Por qué usar expresiones lambda?

Tal que para lograr una más simple, los códigos más claramente, el código de la interfaz de prueba anterior:

//Java8以前的做法:实例化接口
Formula formu = new Formula() {
  @Override
   public double calucalte(int value) {
        return sum(value, 10);//可以直接调用接口中的默认实现方法
   }
};
System.out.println(formu.calucalte(10));
//使用Lambda表达式的做法:本质上还是接口实现。
Formula formula = a -> a + 1;//语法:参数列表->Lambda主体(相当于函数接口的实现),编译器会对参数类型进行判断
System.out.println(formula.maxValue());
复制代码

función de transferencia

biblioteca de clases de Java en el núcleo, la función de transferencia puede verse a menudo en el proceso, la figura inferior es Collectionsun método de clase:

//Java8之前:
List<Integer> values = Arrays.asList(9, 1, 2, 4, 5);
Collections.sort(values, new Comparator<Integer>() {//往方法中传递函数的代码,该方法需要用到函数的执行结果
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
    }
});
//Java8:一行代码解决
Collections.sort(values, Integer::compareTo);//方法引用:复用已存在的方法
复制代码

JDK proporciona una interfaz de función

JDK proporciona muchas funciones útiles en la interfaz, probablemente se enumeran algunas documentación de la API específica puede mirar, ver el código fuente en el transcurso de una más completa comprensible. Stream APIEn muchos sentidos, estos se utilizan y la interfaz.

interfaz para funciones método abstracto explicación
Predicado concluir Tipo prueba booleana (T t); Determinar si un tipo dado parámetros cumplen con ciertas limitaciones
consumidor anular la acepta (T t); Para un tipo dado de parámetros de operación
Alimentación Tipo Proveedor T get (); Volver a los resultados
R aplica (T t) de la función R aplica (T t); tipos T de funcionamiento, devuelven el tipo de resultado R
  • Estas interfaces se ven en el código fuente para uso entre:
//Strem类中的filter方法:通过某种规则进行过滤。
Stream<T> filter(Predicate<? super T> predicate);
//使用时用Lambda表达式实现接口
List list = Stream.of(1, 3, 4, 5, 10).filter(v -> v > 5).collect(Collectors.toList());
复制代码

Flujo (Stream)

Flujos de construcción

¿Cómo construir un flujo de una secuencia de valores, matrices, archivo? Disponibles Stream.of(), Arrays.stream()método

//由值构建
String s = "sunnyDay";
List list = Stream.of(s).collect(Collectors.toList());//使用Stream.of()构建流
//由数组构建
int[] numbers = {2, 0, 2, 0};
int sum = Arrays.stream(numbers).sum();
复制代码

coleccionista

De streamlos elementos para hacer un resumen: Generar lista, mapa

El uso opcional de

puntero nulo defecto de resolver el problema, el uso específico de referencia de este artículo


Referencia: "Java8 combate", "programación funcional Java8", github.com/winterbe/ja ... github.com/Snailclimb / ...

Supongo que te gusta

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