アンナ・クライン:
表現this.apply(stringValue)
を返すtrue
ラムダ式にj8Test.PerformChange$$Lambda$2/284720968@2f4d3709
なぜそれがfalseをtrueを返すとしません。そして、なぜdoestそれがすべてでは実際には何を返しますか?(私はタイプPerformChangeImplの他のすべてのオブジェクトの話ではないのです)
private final List<PerformChange> performChangeList = Arrays.asList(
new PerformChangeImpl("1"),
new PerformChangeImpl("2"),
new PerformChangeImpl("3")
);
@FunctionalInterface
interface PerformChange extends Function<String, Boolean> {
default PerformChange performChange(PerformChange input) {
System.out.println("1 this: " + this);
System.out.println("2 input: " + input);
return stringValue -> {
System.out.println("\n3 this: " + this);
System.out.println("4 input: " + input);
if (this.apply(stringValue)) {
System.out.println("5 this: " + this);
return input.apply(stringValue);
}
return false;
};
}
}
class PerformChangeImpl implements PerformChange {
private final String value;
public PerformChangeImpl(String value) {
this.value = value;
}
@Override
public Boolean apply(String string) {
System.out.println("\n6: " + this);
System.out.println("7: " + string);
return true;
}
@Override
public String toString() {
return "obj id: " + value;
}
}
そして
private void executePerformChanges() {
System.out.println(performChangeList.stream()
.reduce(PerformChange::performChange)
.orElse(new PerformChangeImpl("4"))
.apply("test"));
}
結果
1 this: obj id: 1
2 input: obj id: 2
1 this: j8Test.PerformChange$$Lambda$2/284720968@2f4d3709
2 input: obj id: 3
3 this: j8Test.PerformChange$$Lambda$2/284720968@2f4d3709
4 input: obj id: 3
3 this: obj id: 1
4 input: obj id: 2
6: obj id: 1
7: test
5 this: obj id: 1
6: obj id: 2
7: test
5 this: j8Test.PerformChange$$Lambda$2/284720968@2f4d3709
6: obj id: 3
7: test
true
Process finished with exit code 0
GhostCat敬礼モニカC.:
ここに:
public Boolean apply(String string) {
...
あなたのクラスがPerformChangeImpl
優先されますapply()
メソッドを。それはコアであるFunction
インターフェース。
そして最後に、あなたのコードを呼び出します。
.apply("test"))
そして、内部の非常に最後の文はapply()
次のとおりです。
return true;
メソッドが返すtrue
あなたがそうすることを告げたので、。あなたはどちらかのリターンにそのメソッド本体を変更する必要がありますので、true
/ false
いくつかの条件に基づいて、またはあなたが呼び出すべきではありませんapply()
最後に。
ノート:これはprint文から本当に明らかになりました。最後に、あなたが得る6
と7
あなたが内に印刷され、apply()
のPerformChangeImpl
クラス。
また、注意してください:あなたの不履行方法で行います。
if(this.apply(stringValue)) {
その呼び出しapply()
「周囲」にPerformChangeImpl
...と返されますtrue
。