Implementación de un paradigma funcional simple en colecciones Java y conversión de tipos

Estás haciendo tu propia vida difícil.

List<List<Integer>> listOfListOfIntegersBefore = new FunctionArrayList<>();
[...]
((FunctionArrayList<Integer>) listOfIntegersBefore).apply

¿Por qué no almacenarlo como un FunctionArrayList en primer lugar? Por supuesto que tienes que lanzarlo de esta manera.

De todos modos, encuentro un poco molesto envolver cada lista en una lista funcional, y prefiero hacerlo con métodos estáticos simples:

public interface F<S, T> { T apply(S s); }


public final class FunctionalStuff {
  private FunctionalStuff() {}


  public <S, T> static List<T> map(Collection<? extends S> collection,
                                   F<? super S, ? extends T> func) {
    final List<T> result = new ArrayList<T>(collection.size()); 
    for (S source : collection)
      result.add(func.apply(source)); 
    return result;
  }


  public <S, T> static List<S> filter(Collection<? extends S> collection,
                                      F<? super S, Boolean> predicate) {
    final List<T> result = new ArrayList<T>(collection.size()); 
    for (S source : collection)
      if (predicate.apply(source))
        result.add(source); 
    return result; 
  }

  // etc etc.
}

De todos modos, tenga en cuenta: no le aconsejo que realice una codificación de estilo funcional en Java. Espere los cierres que se agregarán en Java 8.

Alternativamente, use un lenguaje que abarque el estilo funcional: Scala, Javascript, Clojure, Lisp, Mathematica, etc., etc., ¡hay un montón de ellos! Incluso c (++) parece menos molesto que Java.

Respuesta 1

Cuando uso la función count (), el mensaje "prueba interna" llama tres veces como se esperaba, pero cuando elimino la función count (), la función test () no llama. De la documentación de la función count () I ...

Estoy tratando de apilar dos botones uno encima del otro y anclarlos a la parte superior de un panel, pero el segundo botón permanece en el centro del panel. En este código, creo un panel dividido y luego agrego ...

public Void ReserveTimeList () {String sql = "select to_char (to_char (start_time, 'HH24: MI') || '-' || to_char (end_time, 'HH24: MI')) from register_table"; pruebe {DefaultListModel dlm = ...

Estoy dando mis primeros pasos en el desarrollo del paquete osgi usando maven (maven-bundle-plugin) y apache karaf. Mi pregunta es: ¿cómo puedo importar paquetes de otro paquete? Si tengo dos paquetes A y B. ...