モダンジャワ動作-ダイナミックパラメータ化(2)
20385 ワード
複雑なプロセスのシンプル化
匿名クラス例:検証コードの試験方法 Ramda式の使用
リスト形式で抽象化
Comparatorでソート
要求として、リンゴを重量に応じてリストに並べ替えたいという要求も追加された.次に、要件を変更し、色に基づいてソートする場合があります.開発者も,変化する様々な要求に対応できる多様なソート動作の装置が必要である.
JAva 8
JAVAスレッドではコードブロックを並列に実行できます.
Runnableインタフェースを使用して、実行するコードブロックを指定できます.
結果としてCallableを返します
interface ApplePredicate {
boolean test(Apple apple);
}
static class AppleWeightPredicate implements ApplePredicate {
@Override
public boolean test(Apple apple) {
return apple.getWeight() > 150;
}
}
static class AppleColorPredicate implements ApplePredicate {
@Override
public boolean test(Apple apple) {
return apple.getColor() == Color.GREEN;
}
}
public static List<Apple> filter(List<Apple> inventory, Apple.ApplePredicate p) {
List<Apple> result = new ArrayList<>();
for (Apple apple : inventory) {
if (p.test(apple)) {
result.add(apple);
}
}
return result;
}
filterに新しい動作を渡すには、ApplePredicate
インタフェースを実装する各クラスを定義し、インスタンス化する必要があります.これは煩わしい仕事だ.Javaは、クラス宣言とインスタンス化を同時に実行できる익명클래스(anonymous classs)
という技術を提供しています.匿名クラスを使用すると、コード量を大幅に削減できます.匿名クラス
List<Apple> filter = filter(inventory, new Apple.ApplePredicate() {
@Override
public boolean test(Apple apple) {
return Color.RED.equals(apple.getColor());
}
});
匿名クラスを使用してインタフェースを実装する複数のクラスを宣言するプロセスを少し減らすことができます.メソッドを渡すと、最終的にオブジェクトが作成され、新しいアクションを明示的に定義する方法が実装されます. List<Apple> lamdafilter = filter(inventory, (Apple apple) -> RED.equals(apple.getColor()));
Ramda式を使用すると、以前のコードよりもコードを簡潔にすることができ、問題をよりよく説明することができます.これによりパラメータの複雑さを解決することができる.リスト形式で抽象化
public interface Predicate<T> {
boolean test(T t);
}
public static <T> List<T> filter(List<T> list, Predicate<T> p) {
List<T> result = new ArrayList<>();
for (T e : list) {
if (p.test(e)) {
result.add(e);
}
}
return result;
}
これで、リストには整数や文字列など様々な値があり、フィルタリング方法を使用できます. List<Apple> filterlamda1 = filterlamda(inventory, (Apple apple) -> RED.equals(apple.getColor()));
List<Integer> filterlamda = filterlamda(numbers, (Integer i) -> i % 2 == 0);
動的パラメータ化は変化要求に適応しやすい有用なモードである.動作を負のメソッドにカプセル化し,メソッドの動作をパラメータ化する.Comparatorでソート
要求として、リンゴを重量に応じてリストに並べ替えたいという要求も追加された.次に、要件を変更し、色に基づいてソートする場合があります.開発者も,変化する様々な要求に対応できる多様なソート動作の装置が必要である.
JAva 8
List
は、sort
メソッドを含む.Comparator
の動作は、以下のインタフェースを有するsort
オブジェクトを使用してパラメータ化することができる. public interface Comparator<T> {
int compare(T o1, T o2);
}
inventory.sort((Apple a1,Apple a2)->a1.getWeight().compareTo(a2.getWeight()));
Runnableでコードブロックを実行JAVAスレッドではコードブロックを並列に実行できます.
Runnableインタフェースを使用して、実行するコードブロックを指定できます.
public interface Runnable{
void run();
}
Runnableを使用して、さまざまなアクションをスレッドで実行できます.Thread t = new Thread(new Runnable(){
public void run(){
System.out.println("Hello world");
}
});
ランダ食を利用する.Thread t = new Thread(()-> System.out.println("Hello Wordl"));
このように表現することができます.結果としてCallableを返します
ExecutorService
を使用して、技術をスレッドプールに送信し、結果をFuture
に保存することができる.public Interface Callable<V>{
V call();
}
上記のコードを使用して、タスクを実行サービスにコミットできます.Future<String> threadName = executorService.submit(() -> Thread.currentThread().getName());
Reference
この問題について(モダンジャワ動作-ダイナミックパラメータ化(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@devksh930/모던자바인액션-동적파라미터화2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol