1. 程式人生 > >java方法引用學習

java方法引用學習

package jdk18.method.reference;
public class Student {
    private String name;
    private int score;

    public Student(){

    }

    public Student(String name,int score){
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public static int compareStudentByScore(Student student1,Student student2){
        return student1.getScore() - student2.getScore();
    }
    
    public int compare1(Student other){
    	return this.score - other.score; 
    }
    
    public int compare2(Student student1,Student student2){
    	return student1.getScore() - student2.getScore();
    }
    public void print(){
    	System.out.print(this);
    }

    public Integer aa(int i){
    	System.out.println(score+i);
    	return i;
    }
    
    public void bbb(Integer i){
    	System.out.println(i);
    }
    
    public static void ccc(int i){
    	System.out.println(i);
    }

	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}
    
}
package jdk18.method.reference;

public class StudentComparator {
   
	public int compareStudentByScore(Student student1,Student student2){
		
        return student2.getScore() - student1.getScore();
    }
}
package jdk18.method.reference;

public interface TestInterface {

	public int t(Student t1, Student t2, Student t3);
}

測試類;

package jdk18.method.reference;

import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;


public class TestMain {
  
	public static void main(String[] args) {
		f5();
		
	}
	static List<Student> students = null;
	static {
		Student student1 = new Student("zhangsan",60);
		Student student2 = new Student("lisi",70);
		Student student3 = new Student("wangwu",80);
		Student student4 = new Student("zhaoliu",90);
		students = Arrays.asList(student1,student2,student3,student4);
	}
	static void f1(){
		students.sort((o1, o2) -> o1.getScore() - o2.getScore());
		students.forEach(student -> System.out.println(student.getScore()));
	}
	
	static void f2(){
		students.sort(Student::compareStudentByScore);
		students.forEach(student -> System.out.println(student.getScore()));
	}
	
	static void f3(){
		StudentComparator studentComparator = new StudentComparator();
		students.sort(studentComparator::compareStudentByScore);
		students.forEach(student -> System.out.println(student.getScore()));
	}
	
	static void f4(){
		students.forEach(Student::print);
	}
	/**
	 * 例項方法引用總結:首先肯定是與函式式介面強相關,
	 * 類名::方法名,其實感覺是this隱式的作為引數傳入方法內,呼叫的時候直接用this呼叫這個方法,
	 * 所以,這種情況方法引用的引數要比函式式介面中的抽象方法少一個,即this佔用了一個,而且是佔用的第一個,
	 * 如果函式式介面的抽象方法有一個引數, 1.可以直接呼叫無引數方法(this表示該引數,引用的方法,即直接使用這個this來呼叫)
	 *             
	 * 如果函式式介面的抽象方法有兩個引數   2.只能引用有一個引數的方法,且該引數型別必須是這個類的型別,相當於改函式式介面中的第二個引數,
	 *                          因為第一個引數還是被this佔用著。
	 * 注:集合也會自動幫助順序取多個元素與引數方法的多個引數相對應
	 */
	static void f5(){
		students.sort(Student::compare1);
		students.forEach(System.out::print);
		//students.forEach(Student::compare1);
		//students.sort(Student::compare2);
		//TestMain.filter(Student::compare2);
	}
	
	public static void hehe(BiFunction<Student, Integer, Integer>on){
		System.out.println(on.apply(students.get(0), 3));
		
	}
	
	public static void f6(){
		BiFunction<Student, Integer, Integer> on = Student::aa;
		hehe(on);
	}
	
   public static void f7(){
		BiConsumer<Student, Integer> a = Student::bbb;
	}
	
	public static void f7dot5(){
		Student b = new Student();
		Consumer<Integer> a = b::bbb;
	}
	
	public static void f8(){
		Consumer<Integer> a = Student::ccc;
	}

	static void filter(TestInterface i){
		if(i.t(students.get(0), students.get(0), students.get(0)) == 0){
			System.out.println("oooooooooo");
		}
	}
}

相關推薦

java方法引用學習

package jdk18.method.reference; public class Student { private String name; private int score; public Student(){ }

java方法引用(Method References)

java世界的變化有點大,java8之後大家都在寫lambdas表示式,感覺方法引用也是為了支援這一特點吧(當然也看到一些人人說沒什麼用)。 看到這麼一段程式碼,是不是很清晰地解釋了了不同寫法的區別。 可以看到使用雙冒號(::)將例項引用或類名與方法分開。 Iterable介面的foreash方法傳入C

java方向及學習方法

領導 如果 平時 web開發 asc log 集合框架 輕量級框架 web應用開發   隨筆:由於回首最近剛剛上班的緣故,平時基本沒時間上播客了,所以回首會定期的抽時間分享一些幹貨給朋友們,就是周期不會像之前那麽頻繁了。最近有朋友跟回首說想沒事兒的時候自學Java,但苦於不

java 方法修改主函數裏基本數據類型和引用數據類型的區別

rgs 主函數 ring stub auto method args 一個數 傳遞 public class Dog { public void Age(int age) {//副本新建的age age++;//對副本修改 System.out.println

Effective Java 第三版——43.方法引用優於lambda表達式

incr ges ren 常用 eem 占用 pre 我們 his Tips 《Effective Java, Third Edition》一書英文版已經出版,這本書的第二版想必很多人都讀過,號稱Java四大名著之一,不過第二版2009年出版,到現在已經將近8年的時間,但

Lambda學習---方法引用和其他基本應用

截取 map 數量 AR foreach sum -a world ID 1 package com.zx; 2 3 import java.util.*; 4 import java.util.function.*; 5 import java.u

Java設計模式學習記錄-簡單工廠模式、工廠方法模式

static ip ofa 關心 有一個 就是 con 14. 對比 div 前言 之前介紹了設計模式的原則和分類等概述。今天開啟設計模式的學習,首先要介紹的就是工廠模式,在介紹工廠模式前會先介紹一下簡單工廠模式,這樣由淺入深來介紹。 簡單工廠模式 做法:創建一個工

Java 8 中的方法引用

時間 情況 arrays 抽象 以及 eth ted 方式 消費 一、原理概要 lambda 表示式,可以作為某些匿名內部類的替代。主要目的是調用該內部類中的方法,而該方法的實現(重寫)由 lambda表示式決定。 通常,我們可能不關心匿名內部類中的具體方法(被重寫的方法)

java 方法重載,引用數據類型整理 ArrayList集合整理

技術分享 圖片 add 2.3 自己 允許 .get 重載 常用方法 方法的重載 Java允許在一個類中定義多個名稱相同的方法,但是參數的類型或個數必須不同,這就是方法的重載。 public classDemo03 { public static void

Java四種方法引用

方法引用是lambda表示式的一種特殊形式,如果正好有某個方法滿足一個lambda表示式的形式,那就可以將這個lambda表示式用方法引用的方式表示,但是如果這個lambda表示式的比較複雜就不能用方法引用進行替換。實際上方法引用是lambda表示式的一種語法糖。在介紹方法引用使用方式之前,先將方法

零基礎學java的最佳學習方法和最全java知識大綱(含100G學習資料)

相信有很多學習java的道友,在這裡我給大家說說我的群哦,分享一套系統的java教程哦,872603705,絕對的 java乾貨,首先你是學習java的,不管是大神還是小白,我們一同從入門到精通吧! 本文作者:【java進階架構師】 做一個最有態度的java自媒體人。

#零基礎學java的最佳學習方法和最全java知識大綱

我可以很明確的告訴你,學習java不難,難的是沒有人告訴你學習的方法,學習路線的重側點,以及每個階段的坎。我知道我並不是最牛的java大佬,但我知道我最會引導你入門的java自媒體人! 一、學習java的前提 賺錢的動力 相信目前很多人學習java是因為功利性,即聽說了這個行業的高薪,不

java方法之間引數傳遞(java 程式設計語言對物件採用的是引用呼叫嗎)

java方法之間引數傳遞 基礎型別值傳遞 public static void tripleValue(double x){ x = 3*x; } double value = 10; tripleValue(value); System.out.prin

學習Java引用型別時的一點心得二之引用變數

上篇我寫到類的靜態成員屬性(域、變數)是所有此類物件的共同特性,為此類所有的物件所共享;物件的成員屬性為每個用此類創建出的物件所獨有,不為其它物件所有。 那在這裡,我們多次提到一個詞——物件。首先在java中,物件是什麼呢?想在我所讀過的所有的書中都說過這樣一句話:一切皆物件。 我在這裡真有

學習Java引用型別時的一點心得

一、對Java中的變數的心得 在一個java類中,首先根據變數修飾符的不同,可以把變數分為兩類——類變數(靜態變數)和例項變數(物件變數);其次是可以根據變數被宣告時所在位置的不同也可分為兩類——即成員變數和區域性變數。 那這個類中的變數我們都知道,這個東西有什麼好說的呢? 在這裡,我就

淺談Java 8中的方法引用(Method References)

  本人接觸Java 8的時間不長,對Java 8的一些新特性略有所知。Java 8引入了一些新的程式設計概念,比如經常用到的 lambda表示式、Stream、Optional以及Function等,讓人耳目一新。這些功能其實上手並不是很難,根據別人的程式碼抄過來改一下,並不要知道內部的實現原理,也可以很熟

Java 8 方法引用

bar ria john 點擊 targe ati void linda icu Java 8 方法引用 There are four kinds of method references: Kind

lambda表示式之方法引用----java

1.概念 ---- 什麼是方法引用???     對於每一個java類來說,它們都主要有三種方法,即普通方法、靜態方法和構造方法。而方法引用就是利用函式式介面+lambda表示式(這裡的lambda表示式並非前面提到的帶"->“符號的表示式,而是使用雙冒號”::

Java 8 ------------方法引用

在Java8中,我們可以直接通過方法引用來簡寫lambda表示式中已經存在的方法。 Arrays.sort(stringsArray, String::compareToIgnoreCase); 這種特性就叫做方法引用(Method Reference)。 方法引用的形式 方法引用的標準

GuavaCache學習筆記二:Java四大引用型別回顧

前言 上一篇已經講了,如何自己實現一個LRU演算法。但是那種只是最基本的實現了LRU的剔除策略,並不能在生產中去使用。因為Guava Cache中使用的是SoftReference去做的value實現,所以有必要將Java的四種引用型別在複習一下。 備註:以下程式碼使用的JVM配置為: -Xmx128