package fr.yunes;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/*
class Code implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("coucou");
}
}
*/
// Exemple d'interface fonctionnelle
// Une interface fonctionnelle c'est une interface avec une et une seule méthode abstraite
@FunctionalInterface
interface MonInterface {
public void f();
}
public class Main {
public static void main(String[] args) {
JFrame f = new JFrame("test");
JButton b = new JButton("clic");
f.getContentPane().add(b);
f.pack();
f.setVisible(true);
// Code a = new Code();
// b.addActionListener(a);
b.addActionListener(
e -> {
System.out.println("coucou");
System.out.println("cuicui");
}
);
/* Autre exemple d'utilisation des interfaces fonctionnelles
Thread t = new Thread(
()->{
for (int i=0; i<10; i++)
System.out.println(i);
});
t.start();
*/
List<Integer> l = new LinkedList<Integer>();
l.add(5); l.add(10); l.add(56); l.add(666); l.add(667);
for (int v : l ) {
System.out.println(v);
}
A object = new A();
l.forEach(object::f);
l.forEach(A::statf);
int resultat = l.stream()
.filter(i->i%2==0)
.map(Math::sin)
.filter(d->d>0.5)
.map(d->(int)(d*20))
.reduce(0,Integer::sum);
System.out.println(resultat);
Map<Boolean,List<Integer>> r = l.stream()
.collect(Collectors.partitioningBy(i->i%2==0));
System.out.println(r);
Map<Integer,List<Integer>> r2 = l.stream()
.collect(Collectors.groupingBy(i->i%3));
System.out.println(r2);
}
}
class A {
public static void statf(Integer i) {}
public void f(Integer i) {
System.out.println("valeur="+i);
}
}