JAVA 8の新しい特性の関数式インタフェース(一)
49937 ワード
,(Object public ) 。
FunctionalInterface , 。
JDK1.8新規:
3.関数インタフェース解析BiConsumer:BiConsumerインタフェースは、acceptメソッドを宣言する関数インタフェースであり、戻り値はありません.この関数インタフェースは、主に予想される操作を宣言するために使用されます.もう1つのandThenメソッドは、BiConsumerを受け入れ、BiConsumerの組合せを返し、手順に従って操作を実行します.いずれかの操作を実行して例外を投げ出すと、コンビネーション操作の呼び出し元に渡されます.この操作を実行して異常を放出した場合、後操作(after)は実行されません.
public static void main(String[] args) {
System.out.println("------BiConsumer------");
BiConsumer<String,String> biConsumer = (x,y)-> System.out.println(x+"--------------"+y);
BiConsumer<String,String> biConsumer2 = (x,y)-> System.out.println(x+">>>>>>>>"+y);
biConsumer.accept("JACK","JAVA8");
biConsumer.andThen(biConsumer2).accept("biConsumer2","JAVA8");
System.out.println("------BiConsumer------");
}
出力内容:
------BiConsumer------
JACK--------------JAVA8
biConsumer2--------------JAVA8
biConsumer2>>>>>>>>JAVA8
------BiConsumer------
BiFunction:BiFunctionインタフェースは関数インタフェースであり、applyメソッドを宣言し、戻り値Rがある.defaultの
andThen(Function super R, ? extends V> after)
が含まれ、Functionメソッドを受け入れ、結果を返す. public static void main(String[] args) {
System.out.println("------BiFunction------");
BiFunction<Integer,Integer,Integer> = (x, y)-> {return x+y;};
int result = biFunction.apply(1,2);
System.out.println("result:"+result);
Function<Integer,Integer> function = (x)->{return (x*5);};
System.out.println("andThen:"+biFunction.andThen(function).apply(8,9));
System.out.println("------BiFunction------");
}
------BiFunction------
result:3
andThen:85
------BiFunction------
上のresult:3は分かりやすく、1+2、すなわち
biFunction
が実行され、下に出力される85は、biFunction.apply(8,9)
が先に実行され、その後実行されるカスタムfunction
関数である.最後の計算式は(8+9*5=85)です.BinaryOperator:2つの同じタイプのオペレータに作用する操作を表し、オペレータの同じタイプの結果を返します.彼はBiFunctionを継承しているので、BiFunctionのメソッドを使用することができます.
public class MainTest {
public static void main(String[] args) {
System.out.println("------BinaryOperator------");
BinaryOperator<Integer> binaryOperator = (x,y)->x*y;
System.out.println("BinaryOperator:"+binaryOperator.apply(3,8));
Function<Integer,Integer> function1 = (x)->x*8;
System.out.println("BinaryOperator andThen:" + binaryOperator.andThen(function1).apply(8,10));
BinaryOperator<Integer> bi = BinaryOperator.maxBy(Comparator.naturalOrder());
System.out.println("BinaryOperator maxBy:" + (bi.apply(100,99)));
System.out.println("------BinaryOperator------");
}
}
出力結果:
------BinaryOperator------
BinaryOperator:24
BinaryOperator andThen:640
BinaryOperator maxBy:100
------BinaryOperator------
BiPredicate:2つのパラメータを表すboolean値メソッド.このインタフェースは論理演算の関数インタフェースである.比較方法
boolean test(T t, U u)
、論理と方法and(BiPredicate super T, ? super U> other)
、論理非方法negate()
、および論理または方法or(BiPredicate super T, ? super U> other)
が含まれている.test(T t, U u)
:パラメータが条件を満たしているかどうかを判断します.and(BiPredicate super T, ? super U> other)
:同時に満足.negate()
:非演算、類似"!".or(BiPredicate super T, ? super U> other)
:または演算. public class MainTest {
public static void main(String[] args) {
System.out.println("------BiPredicate------");
BiPredicate<String,String> biPredicate = (x,y)-> x.equals(y);
BiPredicate<String,String> biPredicate1 = (x,y)-> (x+"2").equals(y);
System.out.println("False>>>>>:"+biPredicate.test("a","b"));
System.out.println("True>>>>>:"+biPredicate.test("a","a"));
//biPredicate biPredicate1
System.out.println("and >>>>>:"+biPredicate.and(biPredicate1).test("xxx","xxx2"));
//negate , "!"
System.out.println("negate >>>>>:"+biPredicate.negate().test("a","a"));
System.out.println("negate >>>>>:"+biPredicate.negate().test("a","c"));
//or
System.out.println("or >>>>>:"+biPredicate.or(biPredicate1).test("xxx","xxx2"));
System.out.println("or >>>>>:"+biPredicate.or(biPredicate1).test("xxx","xx"));
System.out.println("------BiPredicate------");
}
}
出力結果:
------BiPredicate------
False>>>>>:false
True>>>>>:true
and >>>>>:false
negate >>>>>:false
negate >>>>>:true
or >>>>>:true
or >>>>>:false
------BiPredicate------
BooleanSupplier:Lambda式で返されるboolean値の結果を受信するboolean値の結果を表すプロバイダ.
public class MainTest {
public static void main(String[] args) {
System.out.println("------BooleanSupplier------");
BooleanSupplier booleanSupplier = ()->true;
System.out.println(" booleanSupplier :" + booleanSupplier.getAsBoolean());
int x=2;
int y=3;
BooleanSupplier booleanSupplier1 = ()->x>y;
System.out.println(" booleanSupplier1 :" + booleanSupplier1.getAsBoolean());
System.out.println("------BooleanSupplier------");
}
}
出力結果:
------BooleanSupplier------
booleanSupplier :true
booleanSupplier1 :false
------BooleanSupplier------
Consumer:入力パラメータを受け入れて返さない操作を表し、パラメータを与えて消費処理を行い、処理方式は任意の操作であってもよい.
public class MainTest {
public static void main(String[] args) {
System.out.println("------Consumer------");
Consumer consumer = (m)-> System.out.println(">>>>>"+m);
consumer.accept(" consumer");
consumer.andThen(consumer).accept("This is second");
System.out.println("------Consumer------");
}
}
出力内容:
------Consumer------
>>>>> consumer
>>>>>This is second
>>>>>This is second
------Consumer------
DoubleBinaryOperator:2つのdouble値オペレータに作用する操作を表し、1つのdouble値の結果を返します.
public class MainTest {
public static void main(String[] args) {
System.out.println("------DoubleBinaryOperator------");
DoubleBinaryOperator doubleBinaryOperator = (a,b)->{
if(a>b){
return a-b;
}else{
return b-a;
}
};
double d = doubleBinaryOperator.applyAsDouble(6.1,9.1);
double d1 = doubleBinaryOperator.applyAsDouble(61.1,9.1);
System.out.println("doubleBinaryOperator d>>"+d);
System.out.println("doubleBinaryOperator d1>>"+d1);
System.out.println("------DoubleBinaryOperator------");
}
}
出力内容:
------DoubleBinaryOperator------
doubleBinaryOperator d>>3.0
doubleBinaryOperator d1>>52.0
------DoubleBinaryOperator------
DoubleConsumer:DoubleConsumerはdouble値パラメータを受け入れる操作を表し、結果は返されません.
public class MainTest {
public static void main(String[] args) {
System.out.println("------DoubleConsumer------");
DoubleConsumer doubleConsumer = System.out::println;
doubleConsumer.accept(6.5);
doubleConsumer.andThen(doubleConsumer).accept(18);
System.out.println("------DoubleConsumer------");
}
}
出力内容:
------DoubleConsumer------
6.5
18.0
18.0
------DoubleConsumer------
DoubleFunction:double値のパラメータを受け入れる方法を表し、結果を返します.
public class MainTest {
public static void main(String[] args) {
System.out.println("------DoubleFunction------");
DoubleFunction doubleFunction = (w)->{
if (w>0){
System.out.println(" double ");
return w*2;
}else{
System.out.println(" double ");
return w*2;
}
};
System.out.println("DoubleFunction >>>>"+doubleFunction.apply(18));
System.out.println("DoubleFunction >>>>"+doubleFunction.apply(-18));
System.out.println("------DoubleFunction------");
}
}
出力内容:
------DoubleFunction------
double
DoubleFunction >>>>36.0
double
DoubleFunction >>>>-36.0
------DoubleFunction------
DoublePredicate:double値パラメータを持つboolean値メソッドを表す.具体的な方法はBiPredicate.
```java
public class MainTest {
public static void main(String[] args) {
System.out.println("------DoublePredicate------");
DoublePredicate doublePredicate = qw->qw>0;
DoublePredicate doublePredicate2 = qe->qe>0;
System.out.println("DoublePredicate test====="+doublePredicate.test(-11));
System.out.println("DoublePredicate negate ====="+doublePredicate.negate().test(-11));
System.out.println("DoublePredicate and ====="+doublePredicate.and(doublePredicate2).test(111));
System.out.println("DoublePredicate or ====="+doublePredicate.or(doublePredicate2).test(111));
System.out.println("------DoublePredicate------");
}
}
:
```java
------DoubleFunction------
------DoublePredicate------
DoublePredicate test=====false
DoublePredicate negate =====true
DoublePredicate and =====true
DoublePredicate or =====true
------DoublePredicate------
------DoubleFunction------