<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 8 Function 函數(shù)接口

          共 8238字,需瀏覽 17分鐘

           ·

          2021-07-27 23:43


          封面圖:紹興 · 三味書屋(2021-07-10)

          在 Java 8 中,Function 接口是一個函數(shù)接口,它位于包 java.util.function 下。Function 接口中定義了一個 R apply(T t) 方法,它可以接受一個泛型 T 對象,返回一個泛型 R 對象,即參數(shù)類型和返回類型可以不同。

          Function 接口源碼:

          @FunctionalInterface
          public interface Function<TR{

              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;
              }
          }

          1. Function apply

          示例 1:輸入一個字符串 <T> String, 返回字符串的大寫形式 <R> String

          package com.wdbyte;

          import java.util.function.Function;

          public class Java8Function {
              public static void main(String[] args) {
                  Function<String, String> toUpperCase = str -> str.toUpperCase();
                  String result = toUpperCase.apply("www.wdbyte.com");
                  System.out.println(result);
              }
          }

          輸出結(jié)果:

          WWW.WDBYTE.COM

          示例 2:輸入一個字符串 <T> String,返回字符串的長度 <R> Integer

          package com.wdbyte;

          import java.util.function.Function;

          public class Java8FunctionLength {
              public static void main(String[] args) {
                  Function<String, Integer> lengthFunction = str -> str.length();
                  Integer length = lengthFunction.apply("www.wdbyte.com");
                  System.out.println(length);
              }
          }

          輸出結(jié)果:

          14

          2. Function andThen

          Function 函數(shù)接口的 andThen() 方法可以讓多個 Function 函數(shù)連接使用。

          示例:輸入一個字符串,獲取字符串的長度,然后乘上 2。

          package com.wdbyte;

          import java.util.function.Function;

          public class Java8FunctionAndThen {
              public static void main(String[] args) {
                  Function<String, Integer> lengthFunction = str -> str.length();
                  Function<Integer, Integer> doubleFunction = length -> length * 2;
                  Integer doubleLength = lengthFunction.andThen(doubleFunction).apply("www.wdbyte.com");
                  System.out.println(doubleLength);
              }
          }

          結(jié)果:

          28

          3. List -> Map

          示例:輸入一個字符串 List 集合<T> List<String> , 返回一個 key 為字符串本身,Value 為字符串長度的 Map

          package com.wdbyte;

          import java.util.Arrays;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;
          import java.util.function.Function;

          public class Java8FunctionListToMap {

              public static void main(String[] args) {
                  List<String> list = Arrays.asList("java""nodejs""wdbyte.com");
                  // lambda 方式
                  Function<String, Integer> lengthFunction = str -> str.length();
                  Map<String, Integer> listToMap = listToMap(list, lengthFunction);
                  System.out.println(listToMap);

                  // 方法引用方式
                  Map<String, Integer> listToMap2 = listToMap(list, String::length);
                  System.out.println(listToMap2);
              }

              public static <T, R> Map<T, R> listToMap(List<T> list, Function<T, R> function) {
                  HashMap<T, R> hashMap = new HashMap<>();
                  for (T t : list) {
                      hashMap.put(t, function.apply(t));
                  }
                  return hashMap;
              }
          }

          輸出結(jié)果:

          {java=4, wdbyte.com=10, nodejs=6}
          {java=4, wdbyte.com=10, nodejs=6}

          4. List -> List<Other>

          示例 :輸入一個字符串 List 集合 <T> List<String> ,返回大寫形式的字符串 List 集合,返回小寫形式的字符串 List 集合。

          package com.wdbyte;

          import java.util.ArrayList;
          import java.util.Arrays;
          import java.util.List;
          import java.util.function.Function;

          public class Java8FunctionString {

              public static void main(String[] args) {
                  List<String> list = Arrays.asList("Java""Nodejs""Wdbyte.com");
                  // 方法引用方式
                  List<String> upperList = map(list, String::toUpperCase);
                  List<String> lowerList = map(list, String::toLowerCase);
                  System.out.println(upperList);
                  System.out.println(lowerList);

                  // Lambda 方式
                  List<String> upperList2 = map(list, x -> x.toUpperCase());
                  List<String> lowerList2 = map(list, x -> x.toLowerCase());
                  System.out.println(upperList2);
                  System.out.println(lowerList2);

              }

              public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
                  List<R> resultList = new ArrayList<>(list.size());
                  for (T t : list) {
                      resultList.add(function.apply(t));
                  }
                  return resultList;
              }
          }

          輸出結(jié)果:

          [JAVA, NODEJS, WDBYTE.COM]
          [java, nodejs, wdbyte.com]
          [JAVA, NODEJS, WDBYTE.COM]
          [java, nodejs, wdbyte.com]

          擴(kuò)展閱讀

          Java 11 新特性介紹
          Java 10 新特性介紹
          Java 09 新特性介紹
          Java 8 新特性 -  Stream 介紹
          Java 8 新特性 - Lambda 表達(dá)式介紹
          Java 8 新特性 - 新的時間處理方式
          Java 8 新特性 - 使用Optional處理空指針
          Java 7 新特性介紹
          Java 7 新特性 -  NIO.2 介紹
          瀏覽 38
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99在线免费 | 亚洲免费播放 | 婷婷五月天操 | 免费看片A级毛片免费看电影男 | 三级片在线麻豆 |