相关疑难解决方法(0)

Java是否有立即调用的匿名函数?

例如,我可能想要做这样的任务(在JavaScript中):

var x = (function () {
    // do some searching/calculating
    return 12345;
})();
Run Code Online (Sandbox Code Playgroud)

在Java中,我如何使用Lambdas做类似的事情?编译器不喜欢这样的东西:

Item similarItem = () -> {
    for (Item i : POSSIBLE_ITEMS) {
        if (i.name.equals(this.name)) return i;
    }
    return null;
}();
Run Code Online (Sandbox Code Playgroud)

java lambda

5
推荐指数
1
解决办法
1184
查看次数

如何链接可选的 ifPresent 调用?

假设您有一个Optional,并且您想要多次使用该Optional。\n您现在可以将该Optional保存到一个变量中;然后使用ifPresent两次:

\n
Optional<Animal> optionalAnimal = animalService.getAllAnimals().findFirst();\noptionalAnimal.ifPresent(Animal::eat);\noptionalAnimal.ifPresent(Animal::drink);\n
Run Code Online (Sandbox Code Playgroud)\n

另一种解决方案是放弃方法引用并使用同时执行这两项操作的 lambda:

\n
animalService.getAllAnimals().findFirst()\n    .ifPresent(animal -> {\n        animal.drink();\n        animal.eat();\n    });\n
Run Code Online (Sandbox Code Playgroud)\n

如果我可以控制可选中使用的类,我可以简单地更改方法以使用类似工厂的模式。这样它animal.drink()就会自行返回。\n然后我可以写:

\n
animalService.getAllAnimals().findFirst()\n    .map(Animal::drink)\n    .ifPresent(Animal::eat);\n
Run Code Online (Sandbox Code Playgroud)\n

但这在语义上会很奇怪。而且我不\xe2\x80\x99t 总是可以控制我在可选中使用的每个类。有些类是最终的,所以我什至无法将它们扩展为具有工厂样式的方法。

\n

此外,Optional 类也是final 类,因此扩展Optional 本身也不是选择。\n所有这些对我来说毫无意义。ifPresent()返回无效。如果ifPresent()返回可选本身(类似于peek()流),它将更接近我的目标。

\n

还有其他我没有想到的解决方案吗?

\n
\n

我想要的是这样的:

\n
animalService.getAllAnimals().findFirst()\n    .ifPresent(Animal::drink)\n    .ifPresent(Animal::eat);\n
Run Code Online (Sandbox Code Playgroud)\n

java option-type

1
推荐指数
1
解决办法
592
查看次数

自执行Java方法

在JavaScript中,可以编写一个这样的自执行函数:

(function foo() {
    console.log("bar");
}());
Run Code Online (Sandbox Code Playgroud)

我希望用Java做到这一点.例如:

// This code does not work obviously
public static void main(String[] args) {
    (foo() {
        System.out.println("bar");
    }());
}
Run Code Online (Sandbox Code Playgroud)

有这样的事吗?

java java-7 self-executing-function

0
推荐指数
1
解决办法
1773
查看次数