SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
Programación Funcional en Java 8
Por: Ing. Sergio Rubén Irigoyen Guerra
Historia
Historia
●

Clases Internas Anónimas
JButton button = new Jbutton("Haga click aquí.");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
});
Historia
●

Clases Internas Anónimas
JButton button = new Jbutton("Haga click aquí.");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
});
Clase interna
anónima
Historia
●

Clases Internas Anónimas
JButton button = new Jbutton("Haga click aquí.");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
});
Sintaxis difícil
de manejar

Clase interna
anónima
Historia
●

Clases Internas Anónimas
JButton button = new Jbutton("Haga click aquí.");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
});
Sintaxis difícil
de manejar

Clase interna
anónima

Problema de
“verticalidad”
Interfaces Funcionales
Interfaces Funcionales
●

Una interfaz que tiene exactamente un método abstracto
Interfaces Funcionales
●

Una interfaz que tiene exactamente un método abstracto
–

Runnable

–

Comparator

–

Comparable

–

ActionListener

–

EventHandler
Interfaces Funcionales

public interface Runnable {
public abstract void run();
}
Interfaces Funcionales

Nueva anotación
en Java 8

@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Interfaces Funcionales

Nueva anotación
en Java 8

No es necesaria,
pero es útil

@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Expresiones Lambda
Expresiones Lambda

() ­> {};
Parámetros
de entrada
Expresiones Lambda

() ­> {};
Parámetros
de entrada

Bloque de código
Expresiones Lambda

Un sólo
parámetro

(String s) ­> {};
(String s, Algo c) ­> {};
Expresiones Lambda

Un sólo
parámetro

(String s) ­> {};
(String s, Algo c) ­> {};
Múltiples parámetros,
separados por comas.
Expresiones Lambda

Bloque de código

(String s) ­> {System.out.println(s);};
Expresiones Lambda

Bloque de código

(String s) ­> {System.out.println(s);};
(String s) ­> System.out.println(s);
Se pueden omitir
las llaves en
ciertos casos
Expresiones Lambda

(String nombre) ­> {
String saludo = "Hola " + nombre;
System.out.println(saludo);
}
Bloque de código
con múltiples
instrucciones
Expresiones Lambda

public interface Comparator<T> {
int compare(T o1, T o2);
}
Interface
Comparator
Expresiones Lambda

Comparator<String> comp = (String s1, String s2) ­> 
s1.compareTo(s2);
int result = comp.compare("Argentina", "Aruba");
Implementación
usando una
expresión lambda
Expresiones Lambda

Comparator<String> comp = (String s1, String s2) ­> 
s1.compareTo(s2);
int result = comp.compare("Argentina", "Aruba");

Usando la expresión
lambda para obtener
un resultado
Expresiones Lambda

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
});
button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));
Expresiones Lambda

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Click.");
}
Clase interna
});
anónima
button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));
Expresión
lambda
Inferencia de Tipos
Inferencia de Tipos

button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));
Inferencia de Tipos

button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));

button.addActionListener(e ­> 
System.out.println("Click."));
Inferencia de Tipos

button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));
Tipo
Inferido

button.addActionListener(e ­> 
System.out.println("Click."));
Inferencia de Tipos

button.addActionListener((ActionEvent e) ­> 
System.out.println("Click."));
Tipo
Inferido

button.addActionListener(e ­> 
System.out.println("Click."));
Se pueden
omitir los
paréntesis
Inferencia de Tipos

Comparator<String> comp = (String s1, String s2) ­> 
s1.compareTo(s2);

Comparator<String> comp = (s1, s2) ­> s1.compareTo(s2);
Inferencia de Tipos

Comparator<String> comp = (String s1, String s2) ­> 
s1.compareTo(s2);
Tipos
Inferidos
Comparator<String> comp = (s1, s2) ­> s1.compareTo(s2);
Alcance léxico
Alcance léxico
public class ScopeTest {
    public static void main(String[] args) {
        ScopeTest j = new ScopeTest();
        j.hacer();
    }
    public void hacer() {
        Runnable r = () ­> System.out.println(toString()); 
        r.run();
        Runnable r2 = new Runnable() {
            @Override
            public void run() {
                System.out.println(toString());
            }
        };
        r2.run();
    }
    
    @Override
    public String toString(){
        return "Test";
    }
}
Alcance léxico
public class ScopeTest {
    public static void main(String[] args) {
        ScopeTest j = new ScopeTest();
        j.hacer();
    }
    public void hacer() {
        Runnable r = () ­> System.out.println(toString()); 
        r.run();
        Runnable r2 = new Runnable() {
            @Override
            public void run() {
                System.out.println(toString());
            }
        };
Imprime
        r2.run();
“ScopeTest$1@5acf9800”
    }
    
    @Override
    public String toString(){
        return "Test";
    }
}
Alcance léxico
public class ScopeTest {
    public static void main(String[] args) {
        ScopeTest j = new ScopeTest();
        j.hacer();
    }
    public void hacer() {
        Runnable r = () ­> System.out.println(toString()); 
        r.run();
        Runnable r2 = new Runnable() {
Imprime
            @Override
“Test”
            public void run() {
                System.out.println(toString());
            }
        };
Imprime
        r2.run();
“ScopeTest$1@5acf9800”
    }
    
    @Override
    public String toString(){
        return "Test";
    }
}
Referencias a métodos
Referencias a métodos

public abstract void run();

public static void imprime(){
System.out.println("Funciona");
}
Referencias a métodos

public abstract void run();
Mismo tipo
Imprime
de“Test”
retorno

public static void imprime(){
System.out.println("Funciona");
}
Referencias a métodos

public abstract void run();
Mismo tipo
Imprime
de“Test”
retorno

Mismos
parámetros

public static void imprime(){
System.out.println("Funciona");
}
Referencias a métodos

public abstract void run();
Mismo tipo
Imprime
de“Test”
retorno

Mismos
parámetros

public static void imprime(){
System.out.println("Funciona");
}

le
atib
p
om
c
rma
Fi
Referencias a métodos

public class MethodReferenceTest {
public static void main(String[] args) {
Runnable r2 = MethodReferenceTest::imprime;
r2.run();
}
public static void imprime(){
System.out.println("Funciona");
}
}
Referencias a métodos

public class MethodReferenceTest {
public static void main(String[] args) {
Runnable r2 = MethodReferenceTest::imprime;
r2.run();
}
public static void imprime(){
System.out.println("Funciona");
}
}

Referencia a
método
Interfaces Funcionales
Predefinidas en Java 8
Interfaces funcionales predefinidas en Java 8
●

java.util.function
–

Consumer<T>  argumento tipo T y no retorna ningún
resultado

–

Function<T, R>  argumento tipo T y retorna un
resultado tipo R

–

Supplier<T>  sin argumentos y retorna un
resultado tipo T

–

Predicate<T>  argumento tipo T y retorna un
resultado tipo boolean
Métodos de extensión virtuales
Métodos de extensión virtuales
●

Método forEach de la interfaz Iterable
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
Métodos de extensión virtuales
●

Método forEach de la interfaz Iterable
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
Método
default
Métodos de extensión virtuales
●

Método forEach de la interfaz Iterable
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
Consumer es una
}
Interfaz funcional
Métodos de extensión virtuales

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) && other.test(t);
    }
    default Predicate<T> negate() {
        return (t) ­> !test(t);
    }
    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) || other.test(t);
    }
}
Métodos de extensión virtuales

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);

Un sólo
Método
abstracto

    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) && other.test(t);
    }
    default Predicate<T> negate() {
        return (t) ­> !test(t);
    }
    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) || other.test(t);
    }
}
Métodos de extensión virtuales

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) && other.test(t);
    }
    default Predicate<T> negate() {
        return (t) ­> !test(t);
    }

Métodos
default

    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) ­> test(t) || other.test(t);
    }
}
Streams
Streams
●

Operaciones en Streams
–

Terminales
● count()
● forEach() 

–

Intermedias
● filter() 
● distinct() 
Streams
●

Operaciones en Streams
–

Terminales
● count()
● forEach() 

–

Intermedias
● filter() 
● distinct() 

Lazy
(flojas)
Streams
●

Operaciones en Streams
–

–

Terminales
● count()
● forEach() 
Intermedias
● filter() 
● distinct() 

Eager
(ansiosas)

Lazy
(flojas)
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = s ­> s >= 50;
Predicate<Integer> sm7 = s ­> s <= 70;
long b = numeros.stream().filter(sm5.and(sm70)).count();
System.out.println("Resultado: " + b);
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}

Lista con cien
numeros entre
0 y 100

Predicate<Integer> sm5 = s ­> s >= 50;
Predicate<Integer> sm7 = s ­> s <= 70;
long b = numeros.stream().filter(sm5.and(sm70)).count();
System.out.println("Resultado: " + b);
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = s ­> s >= 50;
Predicate<Integer> sm7 = s ­> s <= 70;
long b = numeros.stream().filter(sm5.and(sm70)).count();
System.out.println("Resultado: " + b);

Obtenemos el
Stream
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = s ­> s >= 50;
Predicate<Integer> sm7 = s ­> s <= 70;
long b = numeros.stream().filter(sm5.and(sm70)).count();
System.out.println("Resultado: " + b);

filter() recibe un
Predicate como
parámetro
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = i ­> i >= 50;
Predicate<Integer> sm7 = i ­> i < 70;

Creamos dos Predicates
utilizando expresiones lambda

long b = numeros.stream().filter(sm5.and(sm70)).count();
System.out.println("Resultado: " + b);

filter() recibe un
Predicate como
parámetro
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = i ­> i >= 50;
Predicate<Integer> sm7 = i ­> i < 70;
long b = numeros.stream().filter(sm5.and(sm7)).count();
System.out.println("Resultado: " + b);

Utilizamos el método default
and() de Predicate
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = i ­> i >= 50;
Predicate<Integer> sm7 = i ­> i < 70;
long b = numeros.stream().filter(sm5.and(sm7)).count();
System.out.println("Resultado: " + b);

Contamos el número
de elementos
Streams
●

Si tenemos una lista con cien numeros entre 0 y 100, y queremos obtener la
cantidad de números que sean mayores o iguales a 50 y menores a 70, podemos
hacerlo de la siguiente forma usando Streams y expresiones lambda:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
    numeros.add(rnd.nextInt(100));
}
Predicate<Integer> sm5 = i ­> i >= 50;
Predicate<Integer> sm7 = i ­> i < 70;
long b = numeros.stream().filter(sm5.and(sm7)).count();
System.out.println("Resultado: " + b);

Mostrar el resultado
Streams
●

Optimización:

List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
rnd.ints(100, 0, 100).forEach(numeros::add);
Predicate<Integer> sm5 = i ­> i >= 50;
Predicate<Integer> sm7 = i ­> i < 70;

Convertir a Stream
y expresiones lambda

long b = numeros.stream().filter((i) ­> (i>=50 && i<70)).count();
System.out.println("Resultado: " + b);
Streams
●

Java 7 vs Java 8:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
numeros.add(rnd.nextInt(100));
}      
int count = 0;
for (Integer i : numeros) {
if(i>=50 && i<70){
count++;
}
}

Java 7

rnd.ints(100, 0, 100).forEach(numeros::add);
long b = numeros.stream().filter(i ­> i>=50 && i<70).count();
System.out.println("Resultado Java7: " + count);
System.out.println("Resultado Java8: " + b);
Streams
●

Java 7 vs Java 8:
List<Integer> numeros = new ArrayList<>();
Random rnd = new Random();
for (int i = 0; i < 100; i++) {
numeros.add(rnd.nextInt(100));
}      
int count = 0;
for (Integer i : numeros) {
if(i>=50 && i<70){
count++;
}
}

Java 7

Java 8

rnd.ints(100, 0, 100).forEach(numeros::add);
long b = numeros.stream().filter(i ­> i>=50 && i<70).count();
System.out.println("Resultado Java7: " + count);
System.out.println("Resultado Java8: " + b);
Preguntas
¡Gracias!

Contenu connexe

Similaire à Java8

Botones swing 14 11-2012
Botones swing 14 11-2012Botones swing 14 11-2012
Botones swing 14 11-2012cruz1793
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo vGiovanny Guillen
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Robert Wolf
 

Similaire à Java8 (8)

Prac6
Prac6Prac6
Prac6
 
In 21
In 21In 21
In 21
 
Botones swing 14 11-2012
Botones swing 14 11-2012Botones swing 14 11-2012
Botones swing 14 11-2012
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo v
 
Practica 6
Practica 6Practica 6
Practica 6
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 
12swing gui
12swing gui12swing gui
12swing gui
 
Mp mardoqueo informe tecnico tap
Mp mardoqueo informe tecnico tapMp mardoqueo informe tecnico tap
Mp mardoqueo informe tecnico tap
 

Plus de Software Guru

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasSoftware Guru
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware Guru
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorSoftware Guru
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealSoftware Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware Guru
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:Software Guru
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosSoftware Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
 

Plus de Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Dernier

Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Festibity
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 

Dernier (14)

Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 

Java8