List names = Arrays.asList("yael", "dvir", "sivan");

1 List names = Arrays.asList("yael", "dvir", "sivan"); Collections.sort(names, new Comparator() { @Override public int compare(String a, String b) ...
Author: Edmund Holt
3 downloads 0 Views 1MB Size
1

List names = Arrays.asList("yael", "dvir", "sivan");

Collections.sort(names, new Comparator() { @Override public int compare(String a, String b) { return a.compareTo(b); } } ); System.out.println(names);

2

List names = Arrays.asList("yael", "dvir", "sivan"); Collections.sort(names, new Comparator() { @Override public int compare(String a, String b) { return a.compareTo(b); } } λ ); Collections.sort(names, (String a, String b) -> { return a.compareTo(b); } ); System.out.println(names);

3

List names = Arrays.asList("yael", "dvir", "sivan"); Collections.sort(names, new Comparator() { ... } ); Collections.sort(names, (String a, String b) -> { return a.compareTo(b); } ); Collections.sort(names, (a, b) -> { return a.compareTo(b); } ); Collections.sort(names, (a, b) -> a.compareTo(b) );

4

5

Comparator @FunctionalInterface default

• • • •

List names = Arrays.asList("yael", "dvir", "sivan");

6

names.forEach( s -> System.out.println(s) ); names.stream().forEach( s -> System.out.println(s) );

names.stream() .map( s -> s.toUpperCase() ) .forEach( s -> System.out.println(s) ); names.stream() .map( String::toUpperCase ) .forEach( s -> System.out.println(s) ); names.stream() .map( s-> (int) s.charAt(0) ) .forEach( s -> System.out.println(s) );

List names = Arrays.asList("yael", "dvir", "sivan");

7

names.forEach( s -> System.out.println(s) ); names.stream().forEach( s -> System.out.println(s) );

names.stream() .map( s -> s.toUpperCase() ) .forEach( s -> System.out.println(s) ); names.stream() .map( String::toUpperCase ) .forEach( s -> System.out.println(s) ); names.stream() .map( s-> (int) s.charAt(0) ) .forEach( s -> System.out.println(s) );

8

streams collections parallel

sequential

• • • •

List names = Arrays.asList("yael", "dvir", "sivan");

names.stream() .filter( s -> s.contains("a")) .forEach( s -> System.out.println(s) ); names.stream() .filter( s -> s.contains("a")) .sorted() .forEach( s -> System.out.println(s) );

9

10

public class NaturalNumbers implements Supplier { private int i = 0; public Integer get() { return ++i; } } public static void main(String[] args) { Stream s = Stream.generate(new NaturalNumbers()); s.limit(5) .map( x -> x*x ) .forEach( System.out::println ); {

11

public class NaturalNumbers implements Supplier { private int i = 0; public Integer get() { return ++i; } } public static void main(String[] args) { Stream s = Stream.generate(new NaturalNumbers()); s.limit(5) .peek( System.out::println ) .forEach( System.out::println ); {

12

lazy peek map

• • •

forEach

terminal



13

public class NaturalNumbers implements Supplier { private int i = 0; public Integer get() { return ++i; } } public static void main(String[] args) { Stream s = Stream.generate(new NaturalNumbers()); s.limit(5) .peek( System.out::println ) ; {

14

public class NaturalNumbers implements Supplier { private int i = 0; public Integer get() { return ++i; } } public static void main(String[] args) { Stream s = Stream.generate(new NaturalNumbers()); s.limit(5) .peek( System.out::println ) ; {

15

public class NaturalNumbers implements Supplier { private int i = 0; public Integer get() { return ++i; } } public static void main(String[] args) { Stream s = Stream.generate(new NaturalNumbers());

s.limit(5) .reduce( (x,y) -> x+y ) .ifPresent( System.out::println );

{

16

List l = s.limit(5) .collect(Collectors.toList());

17



map peek



noninterfering

stateless side effects



18

Optional



null

• s.limit(0) .reduce( (x,y) -> x+y ) .ifPresent( System.out::println );

19

• int

DoubleStream IntStream Stream mapToInt sum

reduce

• • •

20

flatMap • parallelStream •

21

• lazy evaluation

• ml scheme lisp



22

class Person { private String name; private int age; Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name; } }

Benjamin Winterberg

23

List persons = Arrays.asList( new Person("Max", 18), new Person("Peter", 23), new Person("Pamela", 23), new Person("David", 12));

Map personsByAge = persons .stream() .collect(Collectors.groupingBy(p -> p.age)); personsByAge.forEach( (age, p) -> System.out.format("age %s: %s\n", age, p) );

24

List persons = Arrays.asList( new Person("Max", 18), new Person("Peter", 23), new Person("Pamela", 23), new Person("David", 12));

Map personsByAge = persons .stream() .collect(Collectors.groupingBy(p -> p.age)); personsByAge.forEach( (age, p) -> System.out.format("age %s: %s\n", age, p) );

25

Double averageAge = persons .stream() .collect(Collectors.averagingInt(p -> p.age));

of toMap



26

streams

• • •

Suggest Documents