import java.util.List;
import java.util.function.BiFunction;

@FunctionalInterface
public interface Lambda {
	String process(String value);
}

public interface Processor {
	void process(String value);
}

public class Agenda {
	
	Lambda functional = p -> p.toLowerCase();

    private List<String> persons;

    public void lambdaMap(String personName) {
        return persons.stream().map(p -> p.toLowerCase());
    }

    public void lambdaMap2(){
        return persons.stream().map(p -> p.codePoints());
    }

    public void reduce(){
        List<Integer> a;
        return a.stream().reduce((x,y) -> x * y);
    }

    double test(BiFunction<Integer,List,String> func){
        return 0;
    }

    public void print(String value) {
        return process(value, v -> System.out.println(v));
    }

    private void process(String value, Processor a) {
        a.process(value);
    }

    public double bifunc(){
        return test((x,y) -> String.valueOf(func(x,y)));
    }

    int func(int a, List b){
        return 1;
    }

    public void testFunctionalVar() {
    	Lambda a = p -> p.toLowerCase();
    }

    public void testCast(){
        Object a = (Lambda) p -> p.toLowerCase();
    }
    
    public void testInAssignExpr() {
    	Lambda a;
    	a = p -> p.toLowerCase();
    }

}
