首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中迭代lambda函数

如何在Java中迭代lambda函数
EN

Stack Overflow用户
提问于 2018-08-25 16:39:25
回答 1查看 1.4K关注 0票数 12

我可以用Python来实现,我的Python代码是:

代码语言:javascript
复制
signs = {"+" : lambda a, b : a + b, "-" : lambda a, b : a - b}

a = 5
b = 3
for i in signs.keys():
    print(signs[i](a,b))

输出结果为:

代码语言:javascript
复制
8
2

我如何通过HashMap在Java中做同样的事情呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-25 16:46:00

为你自己创造一个漂亮的,类型安全的,enum

代码语言:javascript
复制
enum Operator implements IntBinaryOperator {
    PLUS("+", Integer::sum),
    MINUS("-", (a, b) -> a - b);

    private final String symbol;
    private final IntBinaryOperator op;

    Operator(final String symbol, final IntBinaryOperator op) {
        this.symbol = symbol;
        this.op = op;
    }

    public String symbol() {
        return symbol;
    }

    @Override
    public int applyAsInt(final int left, final int right) {
        return op.applyAsInt(left, right);
    }
}

对于其他运算符,您可能需要一个返回double而不是int的lambda。

现在,只需将其转储到Map

代码语言:javascript
复制
final var operators = Arrays.stream(Operator.values())
        .collect(toMap(Operator::symbol, identity()));

但是,对于您的示例,您根本不需要Map

代码语言:javascript
复制
Arrays.stream(Operator.values())
        .mapToInt(op -> op.applyAsInt(a,b))
        .forEach(System.out::println);

使用:

代码语言:javascript
复制
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52015479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档