JAva 8関数の導出
前に書く-関数の導出
1.静的方法の導出2.例のある方法は第4部を参照3.構造方法は第5部及びその他を参照
1 consumerインタフェースtest
consumerインタフェースの使用方法を定義します
メソッド導出プロセス
2 listインタフェースの出力
出力内容は以下の通り
ここでforEachメソッドはarrayListにおいてソースコードが以下の通りである、すなわちリスト毎のオブジェクトをループし、Consumerのacceptメソッド、すなわちConsumerインタフェースの実装クラスに転送することでこのメソッドを使用することができ、さらにこのような関数を用いて導出する方法を用いてvoidタイプを返し、
3 FunctionインタフェースApplyの方法の導出
まずFunctionインタフェースのソース定義を見てみましょう
すなわち、あるタイプに転送され、別のタイプに戻り、次にこのインタフェースを使用して、転送Stringを完了し、Intのような機能に戻ります.
上のテスト部分もこのように書くことができて、上のいくつかは基本的に匿名の内部クラスの一環で関数の導出を行って、もちろん関数の導出の方式を使って直接インタフェースに対して実現することができます
4インスタンスオブジェクトのメソッドを使用してtestを導出する
出力結果はl、すなわち3番目のアルファベット
5構造関数の導出
6マルチパラメータ構造関数の導出
BiFunctionのようなインタフェースを自分で作成することができます.
6.1関数実体クラスを構築し、三つのパラメータ構造を導入する
6.2 function Interfaceの構築
6.3導出コード
以下の結果が得られたComplexApple{name=‘FuShi’,weight=123,color=‘Green’}
1.静的方法の導出2.例のある方法は第4部を参照3.構造方法は第5部及びその他を参照
1 consumerインタフェースtest
consumerインタフェースの使用方法を定義します
private static void useConsumer(Consumer consumer, T t) {
consumer.accept(t);
}
メソッド導出プロセス
Consumer consumer = (s) -> System.out.println(s);
useConsumer(consumer, "Hello test1");
useConsumer(s -> System.out.println(s), "Hello Alex");
// , consumer accept void , print
useConsumer(System.out::println, "Hello Wangwenjun");
2 listインタフェースの出力
List list = Arrays.asList(new Apple("abc", 123), new Apple("Green", 110), new Apple("red", 123));
System.out.println(list);
list.sort((a1, a2) -> a1.getColor().compareTo(a2.getColor()));
System.out.println(list);
list.stream().forEach(a -> System.out.println(a));
System.out.println("==========================");
list.stream().forEach(System.out::println);
出力内容は以下の通り
[Apple{color='abc', weight=123}, Apple{color='Green', weight=110}, Apple{color='red', weight=123}]
[Apple{color='Green', weight=110}, Apple{color='abc', weight=123}, Apple{color='red', weight=123}]
Apple{color='Green', weight=110}
Apple{color='abc', weight=123}
Apple{color='red', weight=123}
ここでforEachメソッドはarrayListにおいてソースコードが以下の通りである、すなわちリスト毎のオブジェクトをループし、Consumerのacceptメソッド、すなわちConsumerインタフェースの実装クラスに転送することでこのメソッドを使用することができ、さらにこのような関数を用いて導出する方法を用いてvoidタイプを返し、
@Override
public void forEach(Consumer super E> action) {
Objects.requireNonNull(action);
for (E e : a) {
action.accept(e);
}
}
3 FunctionインタフェースApplyの方法の導出
まずFunctionインタフェースのソース定義を見てみましょう
@FunctionalInterface
public interface Function {
R apply(T t);
}
すなわち、あるタイプに転送され、別のタイプに戻り、次にこのインタフェースを使用して、転送Stringを完了し、Intのような機能に戻ります.
//1.
private static R useApply(T input,Function f){
return f.apply(input);
}
//2.
Integer integer1 = useApply("123", s -> Integer.parseInt(s));
//3.
Integer integer = useApply("321", Integer::parseInt);
上のテスト部分もこのように書くことができて、上のいくつかは基本的に匿名の内部クラスの一環で関数の導出を行って、もちろん関数の導出の方式を使って直接インタフェースに対して実現することができます
// , , ,
Function f = Integer::parseInt;
Integer result = f.apply("123");
System.out.println(result);
4インスタンスオブジェクトのメソッドを使用してtestを導出する
String string = new String("Hello");
Function function = string::charAt;
System.out.println(function.apply(2));
出力結果はl、すなわち3番目のアルファベット
5構造関数の導出
// , supplier
Supplier supplier = String::new;
String s = supplier.get();
System.out.println(s);
// BiFunction ,apple String Long, BiFunction
BiFunction appleFuntion = Apple::new;
Apple apple = appleFuntion.apply("red", 100L);
System.out.println(apple);
6マルチパラメータ構造関数の導出
BiFunctionのようなインタフェースを自分で作成することができます.
6.1関数実体クラスを構築し、三つのパラメータ構造を導入する
public class ComplexApple
{
private String color;
private long weight;
private String name;
public ComplexApple(String color, long weight, String name) {
this.color = color;
this.weight = weight;
this.name = name;
}
public String getColor() {
return color;
}
public long getWeight() {
return weight;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "ComplexApple{" +
"name='" + name + '\'' +
", weight=" + weight +
", color='" + color + '\'' +
'}';
}
}
6.2 function Interfaceの構築
@FunctionalInterface
public interface ThreeFunction {
R apply(T t, U u, K k);
}
6.3導出コード
ThreeFunction threeFunction = ComplexApple::new;
ComplexApple complexApple = threeFunction.apply("Green", 123L, "FuShi");
System.out.println(complexApple);
以下の結果が得られたComplexApple{name=‘FuShi’,weight=123,color=‘Green’}