Java関数式プログラミングのConsumerとPredicate
19536 ワード
私のブログへようこそ:L_SKH’Blog
一、Consumer
まずソースコードを見てみましょう:(私たちは彼の最初の方法だけを見ています)それは参照可能なインタフェースであり、accept方法を持っています.
定義に基づいて使用してみましょう.
出力:SKH_X集合のforEachメソッドを見てみましょう.
そのConsumerを見ましたか?jdk 8の後にlambdaの使用があり、Consumerの定義をより簡略化することができます.
二、Predicate
やはりまず彼のソースコードを見てみましょう.それはパラメータを伝えることができるインタフェースでもあり、Consumerとは違ってbooleanタイプを返すことができる関数があります.フィルタとして使えます
適用:10より大きい集合の要素を出力し、Consumerと組み合わせてコードを記述します.
出力:
一、Consumer
まずソースコードを見てみましょう:(私たちは彼の最初の方法だけを見ています)それは参照可能なインタフェースであり、accept方法を持っています.
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
定義に基づいて使用してみましょう.
import java.util.function.Consumer;
/**
* @Created IntelliJ IDEA.
* @Author L_SKH
* @Date 2019/11/16 19:06
*/
public class ConsumerApp {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("SKH");
Consumer consumer1 = new Consumer<StringBuilder>() {
@Override
public void accept(StringBuilder stringBuilder) {
stringBuilder.append("_X") ;
}
} ;
consumer1.accept(builder);
System.out.println(builder);
}
}
出力:SKH_X集合のforEachメソッドを見てみましょう.
@Override
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
final int expectedModCount = modCount;
@SuppressWarnings("unchecked")
final E[] elementData = (E[]) this.elementData;
final int size = this.size;
for (int i=0; modCount == expectedModCount && i < size; i++) {
action.accept(elementData[i]);
}
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
}
そのConsumerを見ましたか?jdk 8の後にlambdaの使用があり、Consumerの定義をより簡略化することができます.
import java.util.function.Consumer;
/**
* @Created IntelliJ IDEA.
* @Author L_SKH
* @Date 2019/11/16 19:06
*/
public class ConsumerApp {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("SKH");
Consumer<StringBuilder> consumer = (str)->{
str.append("_L") ;
} ; //Lambda
consumer.accept(builder);
System.out.println(builder);
ArrayList<Integer> integers = new ArrayList<>();
integers.add(5) ;
integers.add(9) ;
integers.add(8) ;
integers.add(7) ;
integers.forEach((data)->{
System.out.println(data);
});
}
}
二、Predicate
やはりまず彼のソースコードを見てみましょう.それはパラメータを伝えることができるインタフェースでもあり、Consumerとは違ってbooleanタイプを返すことができる関数があります.フィルタとして使えます
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
}
適用:10より大きい集合の要素を出力し、Consumerと組み合わせてコードを記述します.
package org.skh.c025;
import java.awt.print.Pageable;
import java.util.ArrayList;
import java.util.function.Predicate;
/**
* @Created IntelliJ IDEA.
* @Author L_SKH
* @Date 2019/11/16 19:20
*/
public class PredicateApp {
public static void main(String[] args) {
Predicate<Integer> predicate = (data)->{
if (data>10) {
return true;
}
return false ;
} ;
ArrayList<Integer> integers = new ArrayList<>();
integers.add(5) ;
integers.add(12) ;
integers.add(8) ;
integers.add(11) ;
integers.forEach((data)->{
if (predicate.test(data)){
System.out.println(data);
}else{
System.out.println("data<10");
}
});
}
}
出力:
data<10
12
data<10
11
Process finished with exit code 0