Java8_Chapter03

Posted 咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8_Chapter03相关的知识,希望对你有一定的参考价值。

  1 import static java.util.Comparator.comparing;
  2 
  3 import java.util.Arrays;
  4 import java.util.List;
  5 import java.util.function.DoubleFunction;
  6 import java.util.function.Function;
  7 import java.util.function.Predicate;
  8 import java.util.function.Supplier;
  9 
 10 /**
 11  * 在这里编写类的功能描述
 12  *
 13  * @author shangjinyu
 14  * @created 2017/10/3
 15  */
 16 public class Notes {
 17     public static void main(String ... args){
 18     //构造一个待筛选的list
 19     List<Apple> inventory = Arrays.asList(new Apple(80, "green"),
 20             new Apple(155, "green"),
 21             new Apple(120, "red"));
 22 
 23     /**
 24      * Lambda的语法是
 25      * (parameters) -> expression
 26      * 
 27      * 函数式接口就是只定义一个抽象方法的接口
 28      * 
 29      *         Java8中的常用函数式接口
 30      * 函数式接口            函数描述符            原始类型特化
 31      * Predicae<T>          T->boolean          IntPredicate,LongPredicate,DoublePredicate
 32      * Consumer<T>          T->void             IntConsumer,LongConsumer,DoubleConsumer
 33      *
 34      * Function<T,R>        T->R                IntFunction<R>,
 35      *                                          IntToDoubleFunction,
 36      *                                          IntToLongFunction,
 37      *                                          LongFunction<R>,
 38      *                                          LongToDoubleFunction,
 39      *                                          LongToIntFunction,
 40      *                                          DoubleFunction<R>,
 41      *                                          ToIntFunction<T>,
 42      *                                          ToDoubleFunction<T>,
 43      *                                          ToLongFunction<T>,
 44      *
 45      * Supplier<T>          ()->T               BooleanSupplier,IntSupplier, LongSupplier,
 46      * DoubleSupplier
 47      *
 48      * UnaryOperator<T>     T->T                IntUnaryOperator,
 49      *                                          LongUnaryOperator,
 50      * DoubleUnaryOperator
 51      *
 52      * BinaryOperator<T>    (T,T)->T            IntBinaryOperator,
 53      *                                          LongBinaryOperator,
 54      *                                          DoubleBinaryOperator
 55      * BiPredicate<L,R>     (L,R)->boolean
 56      * BiConsumer<T,U>      (T,U)->void         ObjIntConsumer<T>,
 57      *                                          ObjLongConsumer<T>,
 58      *                                          ObjDoubleConsumer<T>
 59      * BiFunction<T,U,R>    (T,U)->R            ToIntBiFunction<T,U>,
 60      *                                          ToLongBiFunction<T,U>,
 61      *                                          ToDoubleBiFunction<T,U>
 62      */
 63     //针对构造函数的方法引用
 64     Supplier<Apple> c1 = Apple::new; //= () -> new Apple();
 65     System.out.println(c1.get());
 66     Function<Integer, Apple> c2 = Apple::new;//= (weight) -> new Apple(weight);
 67     System.out.println(c2.apply(10));
 68 
 69     //复合比较器
 70     inventory.sort(comparing(Apple::getWeight).reversed().thenComparing(Apple::getColor));
 71     //inventory.sort((a, b) -> a.getWeight().compareTo(b.getWeight()));
 72     System.out.println(inventory);
 73 
 74     Predicate<Apple> redApple = apple -> apple.getColor().equals("red");
 75     Predicate<Apple> redAndHeavyAppleOrGreen =redApple.or(a -> a.getWeight().equals(100));
 76     //and和or方法是按照在表达式中的位置,从左向右确定优先级的,即a.or(b).and(c)可以 作(a || b) && c
 77 
 78     //函数复合
 79     Function<Integer, Integer> f = x -> x + 1;
 80     Function<Integer, Integer> g = x -> x * 2;
 81     Function<Integer, Integer> h1 = f.andThen(g);
 82     int result1 = h1.apply(1);//result1 = 4;
 83 
 84     Function<Integer, Integer> h2 = f.compose(g);
 85     int result2 = h2.apply(1);//result2 = 3;
 86 
 87     //计算 f(x) = x * 3 + 10 在x=3 到 x=7 上的积分
 88     double integrate = integrate(a ->  a * 3 + 10, 3 , 7);
 89     System.out.println(integrate);
 90     }
 91 
 92     public static double integrate(DoubleFunction<Double> f, double a, double b) {
 93         return (f.apply(a) + f.apply(b)) * (b-a) / 2.0;
 94     }
 95 
 96     //一个实体类
 97     public static class Apple {
 98         private int weight = 0;
 99         private String color = "";
100 
101         public Apple(int weight, String color) {
102             this.weight = weight;
103             this.color = color;
104         }
105 
106         public Apple() {
107 
108         }
109 
110         public Apple(Integer weight) {
111             this.weight = weight;
112         }
113 
114         public Integer getWeight() {
115             return weight;
116         }
117 
118         public void setWeight(Integer weight) {
119             this.weight = weight;
120         }
121 
122         public String getColor() {
123             return color;
124         }
125 
126         public void setColor(String color) {
127             this.color = color;
128         }
129 
130         public String toString() {
131             return "Apple{" +
132                     "color=‘" + color + ‘\‘‘ +
133                     ", weight=" + weight +
134                     ‘}‘;
135         }
136     }
137 }

 

以上是关于Java8_Chapter03的主要内容,如果未能解决你的问题,请参考以下文章

Java8_Chapter04

Java8_Chapter05

如何获取当前显示的片段?

KDoc:插入代码片段

Android小部件,启动一个片段?

Python 向 Postman 请求代码片段