国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解JAVA8 函數式接口

詳解JAVA8 函數式接口

2020-07-22 18:04冰河團隊 Java教程

這篇文章主要介紹了JAVA8 函數式接口的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

寫在前面

Java8中內置了一些在開發(fā)中常用的函數式接口,極大的提高了我們的開發(fā)效率。那么,問題來了,你知道都有哪些函數式接口嗎?

函數式接口總覽

這里,我使用表格的形式來簡單說明下Java8中提供的函數式接口。

四大核心函數式接口

首先,我們來看四大核心函數式接口,如下所示。

 

函數式接口 參數類型 返回類型 使用場景
Consumer消費型接口 T void 對類型為T的對象應用操作,接口定義的方法:void accept(T t)
Supplier供給型接口 T 返回類型為T的對象,接口定義的方法:T get()
Function<T, R>函數式接口 T R 對類型為T的對象應用操作,并R類型的返回結果。接口定義的方法:R apply(T t)
Predicate斷言型接口 T boolean 確定類型為T的對象是否滿足約束條件,并返回boolean類型的數據。接口定義的方法:boolean test(T t)

 

其他函數接口

除了四大核心函數接口外,Java8還提供了一些其他的函數式接口。

 

函數式接口 參數類型 返回類型 使用場景
BiFunction(T, U, R) T, U R 對類型為T,U的參數應用操作,返回R類型的結果。接口定義的方法:R apply(T t, U u)
UnaryOperator(Function子接口) T T 對類型為T的對象進行一 元運算, 并返回T類型的 結果。 包含方法為 T apply(T t)
BinaryOperator (BiFunction 子接口) T, T T 對類型為T的對象進行二 元運算, 并返回T類型的 結果。 包含方法為 T apply(T t1, T t2)
BiConsumer<T, U> T, U void 對類型為T, U 參數應用 操作。 包含方法為 void accept(T t, U u)
ToIntFunction T int 計算int值的函數
ToLongFunction T long 計算long值的函數
ToDoubleFunction T double 計算double值的函數
IntFunction int R 參數為int 類型的函數
LongFunction long R 參數為 long類型的函數
DoubleFunction double R 參數為double類型的函數

 

四大核心函數式接口

Consumer接口

1.接口說明

Consumer接口是消費性接口,無返回值。Java8中對Consumer的定義如下所示。

?
1
2
3
4
5
6
7
8
9
10
@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); };
  }
}

2.使用示例

?
1
2
3
4
5
6
7
8
public void handlerConsumer(Integer number, Consumer<Integer> consumer){
  consumer.accept(number);
}
 
@Test
public void test1(){
  this.handlerConsumer(10000, (i) -> System.out.println(i));
}

Supplier接口

1.接口說明

Supplier接口是供給型接口,有返回值,Java8中對Supplier接口的定義如下所示。

?
1
2
3
4
@FunctionalInterface
public interface Supplier<T> {
  T get();
}

2.使用示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public List<Integer> getNumberList(int num, Supplier<Integer> supplier){
  List<Integer> list = new ArrayList<>();
  for(int i = 0; i < num; i++){
    list.add(supplier.get())
  }
  return list;
}
 
@Test
public void test2(){
  List<Integer> numberList = this.getNumberList(10, () -> new Random().nextInt(100));
  numberList.stream().forEach(System.out::println);
}

Function接口

1.接口說明

Function接口是函數型接口,有返回值,Java8中對Function接口的定義如下所示。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@FunctionalInterface
public interface Function<T, R> {
  
  R apply(T t);
  
  default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
    Objects.requireNonNull(before);
    return (V v) -> apply(before.apply(v));
  }
 
  default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
    Objects.requireNonNull(after);
    return (T t) -> after.apply(apply(t));
  }
 
  static <T> Function<T, T> identity() {
    return t -> t;
  }
}

2.使用示例

?
1
2
3
4
5
6
7
8
9
public String handlerString(String str, Function<String, String> func){
  return func.apply(str);
}
 
@Test
public void test3(){
  String str = this.handlerString("binghe", (s) -> s.toUpperCase());
  System.out.println(str);
}

Predicate接口

1.接口說明

Predicate接口是斷言型接口,返回值類型為boolean,Java8中對Predicate接口的定義如下所示。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@FunctionalInterface
public interface Predicate<T> {
 
  boolean test(T t);
 
  default Predicate<T> and(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> test(t) && other.test(t);
  }
 
  default Predicate<T> negate() {
    return (t) -> !test(t);
  }
 
  default Predicate<T> or(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> test(t) || other.test(t);
  }
 
  static <T> Predicate<T> isEqual(Object targetRef) {
    return (null == targetRef)
        ? Objects::isNull
        : object -> targetRef.equals(object);
  }
}

2.使用示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public List<String> filterString(List<String> list, Predicate<String> predicate){
  List<String> strList = new ArrayList<>();
  for(String str : list){
    if(predicate.test(str)){
      strList.add(str);
    }
  }
  return strList;
}
 
@Test
public void test4(){
  List<String> list = Arrays.asList("Hello", "Lambda", "binghe", "lyz", "World");
  List<String> strList = this.filterString(list, (s) -> s.length() >= 5);
  strList.stream().forEach(System.out::println);
}

注意:只要我們學會了Java8中四大核心函數式接口的用法,其他函數式接口我們也就知道如何使用了!

寫在最后

最后,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

詳解JAVA8 函數式接口

以上就是詳解JAVA8 函數式接口的詳細內容,更多關于JAVA8 函數式接口的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/binghe001/p/12846649.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜剧 | 欧美日韩免费在线 | 91在线激情 | 最近的中文字幕在线看视频 | 久久久久久久久久久福利观看 | 91免费小视频| 天天操网 | 久久免费国产 | 伊人福利视频 | 日韩在线观看中文字幕 | 岛国av免费 | 免费成人在线观看 | 国产在线高清 | 日韩美女一级片 | 中文一二区 | a天堂国产 | 天天影视色香欲 | 不卡的免费av | 精品视频久久 | 亚洲久草视频 | 天天干天天草 | 国产精品99久久久久久动医院 | 99精品视频在线观看 | 国产成人av综合 | 国产情侣一区二区三区 | 在线三级电影 | 欧美日韩视频 | 黄色av免费在线播放 | 玖玖精品 | 日韩免费一区二区 | 久久久天堂国产精品女人 | 中文字幕一区二区三区日韩精品 | 欧美一区二区三区在线视频 | 1a级毛片免费观看 | 婷婷综合网 | 国产精品久久久久久久久 | 精品国产一区二区三区久久久 | 欧美影 | 涩涩久久 | 亚洲美女网址 | 久久亚洲视频 |