SlideShare uma empresa Scribd logo
1 de 69
Baixar para ler offline
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!

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Mais 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
 

Mais 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
 

Último

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (13)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Java8