(Type1 param1,Type2 param2,Type3 params)->{
statement1;
statement2;
....
return data;
}
複製代碼
一、()->{},lambda參數、箭頭、lambda主體缺一不可java
二、參數類型能夠省略,並且基本都是省略編程
三、lambda主體中若是隻有一條語句能夠省略大括號、return及結尾分號app
四、方法引用能夠做爲lambda表達式dom
@FunctionalInterface
public interface BiFunction<T, U, R> {
R apply(T t, U u);
default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t, U u) -> after.apply(apply(t, u));
}
}
複製代碼
一、這個函數式接口在java 8 stream中大量使用。ide
二、有2個方法,只有1個抽象方法函數式編程
三、抽象方法apply接受2個參數,類型是T,U,返回值是R。函數
四、下面的get()第三個參數的BiFunction函數式接口,所以你在調用get()能夠傳遞一個符合該函數式接口規範的lambda。至於參數一、參數2怎麼操做、運算、加密。。。依賴於你的lambda主體。學習
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
複製代碼
//如下均可以作一個Predicate的lambda
1、(s)->s.length()>0;
2、(v)->v > 100;
3、(o)->o.startWith("a");
複製代碼
Supplier<Integer> supplier = new Supplier<Integer>() {
@Override
public Integer get() {
//返回一個隨機值
return new Random().nextInt();
}
};
System.out.println(supplier.get());
System.out.println(supplier.get());
複製代碼
public static void main(String[] args) {
List<String> list = Lists.newArrayList("1","2","3","4");
List<Integer> collect1 = list.stream().map(v -> Integer.parseInt(v))
.collect(Collectors.toList());
List<Integer> collect2 = list.stream().map(Integer::parseInt)
.collect(Collectors.toList());
}
複製代碼
一、這個任意類型通常指的是你的lambda的入參類型。測試
二、以下面的入參是v,調用v.length能夠寫做v的類型String::length。優化
public static void main(String[] args) {
List<String> list = Lists
.newArrayList("hello", "how", "are", "you", "i", "am", "fine", "thank", "you", "and",
"you");
Set<Integer> collect = list.stream().map(v -> v.length()).collect(Collectors.toSet());
Set<Integer> collect1 = list.stream().map(String::length).collect(Collectors.toSet());
System.out.println(collect);
System.out.println(collect1);
}
複製代碼