【Java】【Lambda】Lambdaメソッドよくあるいくつかの使い方を引用
23396 ワード
基本的な使い方:パラメータを直接持ってコードを実行し、戻り値を導出する
省略法:実行コードが1行しかない場合、コードブロックとreturnを省略できます.
参照クラスの静的メソッド:クラスにパラメータリスト、戻り値タイプ、インタフェースメソッドが完全に一致する静的メソッドが含まれている場合、このクラスの静的メソッドを参照できます.
特定のオブジェクトを参照する方法:オブジェクトにパラメータリストが含まれ、値タイプとインタフェースメソッドが完全に一致するメソッドを返す場合、このオブジェクトメソッドを参照できます.オブジェクトがコードを実行するときに、親または独自のメソッドを参照するには、thisまたはsuperを使用して役割ドメインを指定します.
任意のオブジェクトを参照する方法:このモードでは、インタフェースメソッドの最初のパラメータが実行オブジェクトとして使用され、参照メソッドを呼び出して後のパラメータを実行するのは明らかです.このモードでは、インタフェースメソッドの最初のパラメータは参照クラスタイプと一致し、参照メソッドパラメータ列表とインタフェースメソッドの後のパラメータリストが一致します.
参照構築方法:クラスにインタフェースメソッドのパラメータリストが含まれ、値タイプが完全に一致する構築方法を返す場合、このクラスの構築方法を直接参照できます.
参照配列構築方法:この場合、インタフェースメソッドがintを受信しなければならないことが要求され、配列インタフェースメソッドの実際の実装方法を返すことは、int長の配列を作成することである.
配列構造方法式lambdaの重要な用途は、汎型配列を作成するために使用されることです.汎型の実際のタイプは不確定であり、public構造方法があるとは限らないため、newできないに違いありません.lambdaを通じて、私たちは比較的優雅な方式でnewの汎型配列を間接的にnewすることができます.
public class Test {
public static void main(String[] args) {
AddressComparator comparator = (source, target) -> {
return source.hashCode() - target.hashCode();
};
}
public int compare(Object target) {
return hashCode() - target.hashCode();
}
public interface AddressComparator {
int compare(Test source, Object target);
}
}
省略法:実行コードが1行しかない場合、コードブロックとreturnを省略できます.
public class Test {
public static void main(String[] args) {
AddressComparator comparator = (source, target) -> source.hashCode() - target.hashCode();
}
public int compare(Object target) {
return hashCode() - target.hashCode();
}
public interface AddressComparator {
int compare(Test source, Object target);
}
}
参照クラスの静的メソッド:クラスにパラメータリスト、戻り値タイプ、インタフェースメソッドが完全に一致する静的メソッドが含まれている場合、このクラスの静的メソッドを参照できます.
public class Test {
public static void main(String[] args) {
AddressComparator comparator = Test::compare;
}
public static int compare(Test source, Object target) {
return 0;
}
public interface AddressComparator {
int compare(Test source, Object target);
}
}
特定のオブジェクトを参照する方法:オブジェクトにパラメータリストが含まれ、値タイプとインタフェースメソッドが完全に一致するメソッドを返す場合、このオブジェクトメソッドを参照できます.オブジェクトがコードを実行するときに、親または独自のメソッドを参照するには、thisまたはsuperを使用して役割ドメインを指定します.
public class Test {
public static void main(String[] args) {
Test test = new Test();
AddressComparator comparator = test::compare;
}
public void run(){
AddressComparator comparator = this::compare;
}
public int compare(Test source, Object target) {
return source.hashCode() - target.hashCode();
}
public interface AddressComparator {
int compare(Test source, Object target);
}
}
任意のオブジェクトを参照する方法:このモードでは、インタフェースメソッドの最初のパラメータが実行オブジェクトとして使用され、参照メソッドを呼び出して後のパラメータを実行するのは明らかです.このモードでは、インタフェースメソッドの最初のパラメータは参照クラスタイプと一致し、参照メソッドパラメータ列表とインタフェースメソッドの後のパラメータリストが一致します.
public class Test {
public static void main(String[] args) {
// source.compareTo(target)
AddressComparator comparator = Test::compare;
}
public int compare(Object target) {
return hashCode() - target.hashCode();
}
public interface AddressComparator {
int compare(Test source, Object target);
}
}
参照構築方法:クラスにインタフェースメソッドのパラメータリストが含まれ、値タイプが完全に一致する構築方法を返す場合、このクラスの構築方法を直接参照できます.
public class Test {
public static void main(String[] args) {
AddressComparator comparator = Test::new;
}
public Test() {
}
public Test(int arg) {
}
public Test(int[] args) {
}
public interface AddressComparator {
void compare(int arg);
}
}
参照配列構築方法:この場合、インタフェースメソッドがintを受信しなければならないことが要求され、配列インタフェースメソッドの実際の実装方法を返すことは、int長の配列を作成することである.
public class Test {
public static void main(String[] args) {
AddressComparator<int[]> comparator = int[]::new;
int[] compare = comparator.length(10);
System.out.println(compare.length);
}
public interface AddressComparator<R> {
R length(int arg);
}
}
配列構造方法式lambdaの重要な用途は、汎型配列を作成するために使用されることです.汎型の実際のタイプは不確定であり、public構造方法があるとは限らないため、newできないに違いありません.lambdaを通じて、私たちは比較的優雅な方式でnewの汎型配列を間接的にnewすることができます.
public class Test {
private static final List<String> list = new ArrayList();
static {
list.add("item");
list.add("item");
list.add("item");
list.add("item");
}
public static void main(String[] args) {
ListArrayConvertor<String> convertor = String[]::new;
String[] array = convertor.listToArray(list);
System.out.println(array[3]);
}
public interface ListArrayConvertor<R> {
R[] buildArray(int length);
default R[] listToArray(List<R> list) {
R[] array = buildArray(list.size());
for (int i = 0; i < list.size(); i++)
array[i] = list.get(i);
return array;
}
}
}