日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

浅析函数式接口

發(fā)布時(shí)間:2024/2/28 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析函数式接口 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

消費(fèi)性接口

① Consumer是一個(gè)接口,并且只要實(shí)現(xiàn)一個(gè) accept 方法,就可以作為一個(gè)“消費(fèi)者”輸出信息。 ② 其實(shí),lambda 表達(dá)式、方法引用的返回值都是 Consumer 類型,所以,他們能夠作為 forEach 方法的參數(shù),并且輸出一個(gè)值。 public static void main(String[] args) { ?//1.使用Consumer接口實(shí)現(xiàn)方法 ? 未使用lambda表達(dá)式Consumer<String> consumer = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};// of(T... values)//返回其元素是指定值的順序排序流。Stream<String> stream = Stream.of("aaa","bbb","ccc","ddd");//forEach(Consumer<? super T> action)//對(duì)此流的每個(gè)元素執(zhí)行操作。stream.forEach(consumer); ?System.out.println("--------------------------------"); ?//2.使用Consumer接口實(shí)現(xiàn)方法 ? 使用lambda表達(dá)式stream = Stream.of("aa","bb","cc","dd","ff");Consumer<String> consumer1 = (s)-> System.out.println(s);stream.forEach(consumer1); ?System.out.println("--------------------------------"); ?//3.plus版 // ? ? ? stream.forEach((s)-> System.out.println(s)); ? ?System.out.println("--------------------------------"); ?//4.使用方法引用,方法引用也是一個(gè)consumerstream = Stream.of("李孟冬","董康");Consumer<String> consumer2 = System.out::println;stream.forEach(consumer2);} public static void main(String[] args) { ?Consumer<String> consumer = (s)-> System.out.println(s);test(consumer,1200,"李孟冬"); ?}public static void test(Consumer<String> consumer,int money,String str){//void accept(T t)對(duì)給定的參數(shù)執(zhí)行此操作。consumer.accept(money + str);}

供給型接口

Supplier簡(jiǎn)單來(lái)說(shuō)就是一個(gè)容器 ? 對(duì)于其方法get解釋更為簡(jiǎn)單 ,獲得結(jié)果。 ① Supplier 接口可以理解為一個(gè)容器,用于裝數(shù)據(jù)的。 ② Supplier 接口有一個(gè) get 方法,可以返回值。 public static void main(String[] args) {//1.使用Supplier接口實(shí)現(xiàn)方法,只有一個(gè)get方法,無(wú)參數(shù),返回一個(gè)值Supplier<Integer> supplier = new Supplier<Integer>() {@Overridepublic Integer get() {return new Random().nextInt();}};System.out.println(supplier.get()); ? ? ? ? ? //2.使用lambda ? ? ? ? supplier = () -> new Random().nextInt(); ? ? ? ? System.out.println(supplier.get()); ? ? ? ? ? //3.使用方法引用 ? ? ? ? Supplier<Double> supplier2 = Math::random; ? ? ? ? System.out.println(supplier2.get()); ? ? ? ? ? //或許體會(huì)不到:: ? 然后看這個(gè)。 ? 它的意思也就是類名:方法名 ? ? ? ? User user = new User(1,"李孟冬","123456"); ? ? ? ? Supplier<String> supplier1 = user::getName; ? ? ? ? System.out.println(supplier1.get()); ? ? ? } public static void main(String[] args) {Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);//返回一個(gè)optional對(duì)象//filter(Predicate<? super T> predicate)//返回由與此給定謂詞匹配的此流的元素組成的流。// findFirst()//返回描述此流的第一個(gè)元素的Optional如果流為空,則返回一個(gè)空的Optional 。Optional<Integer> optional = stream.filter(i -> i >5 ).findFirst();//可以在這里多次換數(shù)進(jìn)行比較// get()//如果 Optional中有一個(gè)值,返回值,否則拋出 NoSuchElementException 。System.out.println(optional.get()); ? ?//orElse(T other)//返回值如果存在,否則返回 other 。System.out.println(optional.orElse(5));System.out.println(optional.orElse(7));//即如果optional為空則返回other如果不為空則返回optional中的值 ?//orElseGet(Supplier<? extends T> other)//返回值(如果存在),否則調(diào)用 other并返回該調(diào)用的結(jié)果。System.out.println(optional.orElseGet(() -> new Random().nextInt())); ? ?//即orElse:如果first中存在數(shù),就返回這個(gè)數(shù),如果不存在,就放回傳入的數(shù)//orElseGet:如果first中存在數(shù),就返回這個(gè)數(shù),如果不存在,就返回supplier返回的值 }

斷言式接口

Predicate謂詞測(cè)試,謂詞其實(shí)就是一個(gè)判斷的作用類似bool的作用 ① Predicate 是一個(gè)謂詞型接口,其實(shí)只是起到一個(gè)判斷作用。 ② Predicate 通過實(shí)現(xiàn)一個(gè) test 方法做判斷。 public static void main(String[] args) {//使用Predicate接口實(shí)現(xiàn)方法,只有一個(gè)test方法,傳入一個(gè)參數(shù),返回一個(gè)bool值//不使用lambdaPredicate<Integer> predicate = new Predicate<Integer>() {@Overridepublic boolean test(Integer integer) {if (integer > 5){return true;}return false;}};System.out.println(predicate.test(6));//true ?predicate = (t) -> t>5;System.out.println(predicate.test(1));//false} public static void main(String[] args) {Predicate<Integer> predicate = (t) -> t>5 ;// of(T... values)//返回其元素是指定值的順序排序流。Stream<Integer> stream = Stream.of(1,323,65,4,8,6232,20);//filter(Predicate<? super T> predicate)//返回由與此給定謂詞匹配的此流的元素組成的流。// collect(Collector<? super T,A,R> collector)//使用 Collector對(duì)此流的元素執(zhí)行 mutable reduction Collector 。List<Integer> list = stream.filter(predicate).collect(Collectors.toList());list.forEach(System.out::println);//嗯,我查了1.8的api并沒有顯示forEach方法//根據(jù)詢問,嗯forEach方法來(lái)自于Collection//不過從方法中我們看出,forEach(方法引用) ?}

函數(shù)式接口

Function 接口是一個(gè)功能型接口,它的一個(gè)作用就是轉(zhuǎn)換作用,將輸入數(shù)據(jù)轉(zhuǎn)換成另一種形式的輸出數(shù)據(jù)。 ① Function 接口是一個(gè)功能型接口,是一個(gè)轉(zhuǎn)換數(shù)據(jù)的作用。 ② Function 接口實(shí)現(xiàn) apply 方法來(lái)做轉(zhuǎn)換。 public static void main(String[] args) {//① 使用map方法,泛型的第一個(gè)參數(shù)是轉(zhuǎn)換前的類型,第二個(gè)是轉(zhuǎn)化后的類型Function<String,Integer> function = new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return s.length();}};Stream<String> stream = Stream.of("aaaa","dddd","fff","gggg","hhhh");//map(Function<? super T,? extends R> mapper)//返回由給定函數(shù)應(yīng)用于此流的元素的結(jié)果組成的流。Stream<Integer> stream1 = stream.map(function);//forEach(Consumer<? super T> action)//對(duì)此流的每個(gè)元素執(zhí)行操作。stream1.forEach(System.out::println); ?}

總結(jié)

以上是生活随笔為你收集整理的浅析函数式接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。