lunes, 26 de octubre de 2015

Lambdas

Lambdas



Una característica única de las interfaces funcionales es que pueden ser instanciadas usando "lambdas". Veamos algunos ejemplos de lambdas.

Una lista de entradas separada por comas, indicando el tipo de datos, y un bloque que retorna la suma de ambos parámetros:

(int x, int y) -> { return x + y; }


 Una lista de entradas separada por comas, infiriendo el tipo de datos, y retorna la suma de ambos:

(x, y) -> x + y

Un único parámetro con el tipo de dato inferido, y retorna ese parámetro al cuadrado:


x -> x * x

Sin valores de entrada, retorna un valor:

() -> x

Un único parámetro de entrada con el tipo de datos inferido, y un bloque que retorna void a la derecha:

x -> { System.out.println(x); }

También hay algunas formas "cortas" de escribir lambdas comunes:

String::valueOf             x -> String.valueOf(x)
Object::toString            x -> x.toString()
x::toString                    () -> x.toString()
ArrayList::new             () -> new ArrayList<>()

Por supuesto, en Java existe la sobrecarga de métodos. Los operadores lambda intentan usar el método que mejor se adapte a la expresión: se tienen en cuenta los valores de entrada, de salida y las excepciones declaradas.

Por ejemplo:

Comparator c = (a, b) -> Integer.compare(a.length(), b.length());

El método "compare" de Comparator tiene dos parámetros de entrada , y retorna un int. Esto es consistente con el lambda de la derecha, por lo cual es una asignación válida.

Runnable r = () -> { System.out.println("Running!"); }


El método "run" de la interfaz Runnable no recibe parámetros de entrada, y retorna void. Esto es consistente con el lambda de la derecha, y resulta en una asginación válida.

También se tienen en cuenta las excepciones chequeadas declaradas en la firma del método. El lambda sólo puede lanzar excepciones chequeadas si están declaradas en la interfaz.

Ejemplos de uso de lambdas en Java 8

Actualmente, para agregarle un listener a un botón podemos hacer:

btn.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        System.out.println("Hola, mundo!");
    }
});     
Con expresiones lambda de Java 8 podemos hacer exactametne lo mismo con la siguiente expresión:

btn.setOnAction(
    event -> System.out.println("Hola, mundo!")
); 
También se puede usar el operador :: para hacer referencia a métodos estáticos de una clase:

public class Utils {
    public static int compareByLength(String in, String out){
        return in.length() - out.length();
    }
}

public class MyClass {
    public void doSomething() {
        String[] args = new String[] {"microsoft","apple","linux","oracle"}
        Arrays.sort(args, Utils::compareByLength);
    }
}  
... o también podemos acceder a métodos no estáticos:



public class MyClass implements Comparable<MyObject> {

    @Override
    public int compareTo(MyObject obj) {return ...}

    public void doSomething() {
        MyObject myObject = new MyObject();
        Arrays.sort(args, myObject::compareTo);
    }
}

Clases anónimas java 8

Clases anónimas: son como las clases locales ( una clase definida en un bloque )  Pero las clases anónimas no tienen un nombre. Te permiten declara y una instancia de una clase a la vez .


Parametrización: Es el Comportamiento de la capacidad de un método para tomar múltiples comportamientos diferentes como parámetros y los utilizan internamente para lograr diferentes comportamientos.

sábado, 24 de octubre de 2015

Cómo eliminar en los Samsung Galaxy los avisos de notificaciones circulares de las apps



Desde hace un tiempo en los terminales de la gama Samsung Galaxy se puede conocer de forma visual la cantidad de notificaciones pendientes de revisar que hay en una aplicación. Para ello aparece en el icono una imagen circular de color naranja que muestra el número concreto. Esto, en un principio puede resultar bastante útil, pero quizá para algunos usuarios sea todo un incordio. Te explicamos cómo eliminar estos avisos. Un ejemplo de los desarrollos que proporcionan de esta forma la información son los propios de las redes sociales, como puede ser Facebook. 

El caso es que existe una forma bastante sencilla de evitar esto en los Samsung Galaxy sin necesidad de realizar complejos procesos en ellos, como por ejemplo tener que desprotegerlo (rootearlo), por lo que no hay riesgo alguno en ello y, lo mejor de todo, lo que se tiene que hacer es totalmente reversible. 

Los pasos a realizar 

Antes de nada tienes que saber que no es necesario instalar ninguna aplicación adicional para conseguir que los iconos de inflación de las notificaciones pendientes que hay en las aplicaciones no parezca más, por lo que se tienen que utilizar sólo las opciones propias del sistema operativo de tu Samsung Galaxy. Eso sí, en algunos modelos si no tienen instalado Android Lollipop es to no es posible, por lo que es posible que en algún caso específico no sea posible realizar lo que indicamos en TouchWiz.



Lo primero que tienes que hacer es acceder a los Ajustes del sistema operativo, algo que se puede hacer utilizando el icono correspondiente que hay en el “grid” de aplicaciones o , en su defecto, utilizando la Barra de notificaciones y la opción que tiene la imagen de un engranaje dentado en la parte derecha. En ambos casos, los resultados son idénticos. Ahora busca el Administrado de aplicaciones entre los apartados disponibles (está en General). Sitúate en la opción Todo y selecciona el proceso denominado BadgeProvider. Pulsa sobre él y tienes que pulsa ahora el botón denominado Forzar detención y, luego, el que tiene como nombre Deshabilitar. Esto hará que los avisos en tu Samsung Galaxy ya no aparezcan más. Así de sencillo y rápido. 



Último paso a dar 

Una vez realizado todo lo indicado (que recordamos que son pasos totalmente reversibles), tienes que reiniciar el terminal para que los cambios tengan efectos reales en el funcionamiento del sistema operativo. Otros trucos para el sistema operativo de Google los puedes conocer en este apartado de Android Ayuda.





Ha desaparecido la música de tu Android? Así puedes recuperarla


¿Habéis copiado más música en vuestro smartphone Android y no aparece por ninguna parte, en el reproductor de música ni en la biblioteca? Es un problema bastante común, sobre todo en las últimas versiones de sistema operativo. Incluso, si cambias las etiquetas de las canciones, tienes posibilidades de que tampoco se actualicen. Hoy os enseñaremos a cómo actualizar vuestra biblioteca sin ningún problema. 

Curiosamente en Android no existe ningún botón para actualizar la biblioteca musical, algo que al menos recuerdo que se implementó en el ya “desaparecido” Symbian, facilitando mucho la tarea de escuchar música al pasarla a nuestra tarjeta de memoria. No obstante, si tu smartphone no actualiza las nuevas canciones, existe una solución que puede resultar un poco “bruta” pero bastante efectiva. Básicamente, el sistema operativo crea un archivo con la información de todos los archivos –valga la redundancia- de sonido que encuentra. Su tamaño varía según la música que tengamos en nuestro terminal, comenzando desde unos 200 kB y alcanzando varias decenas de megas. Pues bien, este archivo llamado “Almacenamiento de medios” es el encargado de actualizar nuestra música en la biblioteca y, en muchas ocasiones, deben pasar varias horas hasta que se actualice de nuevo, por lo que no veremos reflejados los cambios que hemos realizado.


Para solucionar el problema de la biblioteca musical nos iremos hasta “Ajustes -> Aplicaciones -> Todas” y ahí buscaremos el archivo que acabamos de comentar y procederemos a borrar sus datos. Tras esto, y al reiniciar el móvil, el archivo volverá a buscar la información de la música guardada en nuestro teléfono y comenzará a actualizar la biblioteca. 

lunes, 19 de octubre de 2015

EXPRESIONES LAMBDA EN JAVA 8

EXPRESIONES LAMBDA EN JAVA 8

INTRODUCCION

En lenguajes orientados a objetos, la clave te todo es el objeto, pero sucede lo contrario en los lenguajes de programación funcionales donde son éstas las donde recaen toda la importancia, en ellas se pueden pasar alrededor como si fueran variables esto se ve en Haskell, javascript y otros lenguajes funcionales. Los lenguajes funcionales tienen otras construcciones que no están fácilmente disponibles en los lenguajes orientados a objetos como son las expresiones lambda.

Expresión lambda no era parte de las versiones anteriores de Java, se intentaba simular con normalmente a través del uso de la clase anónima que no era nada elegante. Con la introducción de Lambda Expression en Java 8 podremos hacer que Java se comporte también como un lenguaje funcional. Por lo tanto, la introducción de expresiones lambda en Java 8 en una forma de puente con el lenguaje de programación funcional.

Las expresiones lambda, que normalmente las conocemos como “la función anónima”, es una función sin nombre. Es un atajo que le permite declarar un método en el que se va a utilizar, sin especificar el nombre del método, el tipo de cambio ni el acceso. Le permite tratar el código como los datos y usar funciones como argumentos de método.

¿Cual es la importancia de las Expresiones Lambda?


Con la introducción de las expresiones lambda en java se puedan aprovechar los beneficios del lenguaje funcional dentro de un lenguaje orientado a objetos. Las expresiones lambda proporcionan un medio para escribir códigos claros y concisos con el uso de expresiones.

Ejemplos

Sintaxis

(Argumento) -> (cuerpo)
– Donde puede haber cero o más argumentos, El token “flecha” (->) es el operador lambda java y (cuerpo) contiene una o más línea de códigos que se ejecutan cuando se llama la función.

Ejemplo de Uso

(Int a, int b) -> a * b

Los argumentos de la expresión son los valores enteros A y B que sería utilizado por la expresión para devolver la salida de la operación de multiplicación.

(Persona p) -> {p.getAge return ();}

Se toma una persona objeto como argumento, mientras que la expresión devuelve el valor del método getAge () llamado en el objeto.

Antes de Java 8, los códigos para manejar “EventListener” se escribían normalmente con la clase anónima

btnOk.setOnAction (newEventHandler () {
@ Override
public void handle (ActionEvent e) {
/ / código manejador del evento del botón
}
});

Con las expresiones lambda, el código del EventListener se puede hacer mucho más elegante, con menos líneas de código, veamos cómo:

btnOk.setOnAction (e -> {
/ / códigos para manejar eventos de botón se escribirían aquí
});


REF
 http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html