JAVA/in 기초

[JAVA]Labmda 맛보기

lahuman 2016. 7. 20. 16:41
728x90

Lambda Basic

function has 4 things

  1. name
  2. parameter list
  3. body
  4. return type
Thread th = new Thread(new Runnable(){
    public void run(){
        Sysout.out.println("In side Thread");
    }
});
th.start();

lambda expression

1. name

  1. parameter list
  2. body

4. return type

Thread th = new Thread(() ->Sysout.out.println("In side Thread"));
th.start();

iterators

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//external iterators
for(int i = 0; i < numbers.size(); i++){
    System.out.println(numbers.get(i));
}

//external iterators also
for( int e : numbers){
    System.out.println(e);
}

//interal iterators
numbers.forEach(new Consumer<Integer(){
    public void accept(Integer value){
        System.out.println(value);
    }
});

numbers.forEach((Integer value) ->System.out.println(value));

numbers.forEach((value) ->System.out.println(value));

//only for on parameter lambdas
numbers.forEach(value ->System.out.println(value));

numbers.forEach(System.out::println);

//ANTI PATTERN :: DO NOT USE LIKE THIS!
number.forEach(e -> {
...;
...;
...;
return ... need return...;
});

Parameter

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
numbers.stream()
    //.map(e -> String.valueOf(e))
    .map(String::valueOf)
    .forEach(System.out::println);

numbers.stream()
    .map(e -> String.valueOf(e))
    //.map(e -> e.toString())
    .map(String::toString)
    .forEach(System.out::println);

Two parameter

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
System.out.println(
    numbers.stream()
        //.reduce(0, (total, e) -> Integer.sum(total, e)));
        .reduce(0, Integer::sum));
);
System.out.println(
    numbers.stream()
        .map(String::valueOf)
        //.reduce("", (carry, str) -> carry.concat(str)));
        .reduce("", String::concat));
);

Stream

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//given thevalues, double the even numbers and total.
int result = 0;
for(int e : numbers){
    if(e % 2 == 0){
        result += e*2;
    }
}
System.out.println(result);

System.out.println(
    numbers.stream()
        .filter(e -> e % 2 == 0)
        .mapToInt(e ->e * 2)
        //.reduce(0, Integer::sum));
        .sum();
);

출처


Get a Test of Lambda.md



728x90