天天看點

《java8 實戰》 筆記

流操作筆記

流查找值

終端操作
 findAll()  //查找流中的任意元素并傳回  使用Optional<T>容器類類,就可以避免查找傳回null
 findfirst() //查找流中的第一個元素并傳回  使用Optional<T>容器類類,就可以避免查找傳回null

Optional<T>類容器類
常用終端操作,配合查找操作使用
 isPresent() 将容器類中包含值時傳回true,不存在則傳回false
 ifPresent(Consumer<T> block) 會在容器類存在值時傳回語句塊結果(傳回void的Lambda
表達式。)
 T get()會在值存在時傳回值,否則抛出一個NoSuchElement異常
 T orElse(T other) 當容器類中不存在時傳回設定的預設值。 
           

流的歸納操作

資料歸納
int calories = menu.stream() 
                   .mapToInt(Dish::getCalories)  
                   .sum();

求最大值
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = numbers.stream().reduce(Integer::max);
System.out.println(max.orElse(0));
System.out.println(numbers.stream().max(Integer::compare).get());
System.out.println(numbers.stream().mapToInt(i -> i).max().getAsInt());

統計操作
count()


           

建立流操作

由值建立流
Stream<String> stream = Stream.of("Java 8 ", "Lambdas ", "In ", "Action"); 
stream.map(String::toUpperCase).forEach(System.out::println);  //字元傳大寫

數組建立流
int[] numbers = {2, 3, 5, 7, 11, 13}; 
int sum = Arrays.stream(numbers).sum();

由函數建立流:建立無限流
Stream API提供了兩個靜态方法來從函數生成流:Stream.iterate和Stream.generate。
這兩個操作可以建立所謂的無限流:不像從固定集合建立的流那樣有固定大小的流。由iterate
和generate産生的流會用給定的函數按需建立值,是以可以無窮無盡地計算下去!一般來說,
應該使用limit(n)來對這種流加以限制,以避免列印無窮多個值
Stream.iterate(0, n -> n + 2) 
      .limit(10) 
      .forEach(System.out::println); 
      
           

流的收集

終端操作
collect() 
填入參數為Collectors工廠類的方法
常用工廠類靜态方法
toList()
groupingBy()
           
《java8 實戰》 筆記