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

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 

Último (20)

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 

Java8