首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用嵌套的Lambda函数Java 8

应用嵌套的Lambda函数Java 8
EN

Stack Overflow用户
提问于 2018-05-29 12:56:29
回答 1查看 1.9K关注 0票数 0

我有一个包含数据的对象,其中有些字段是按部分的,但有些字段是按条件、按部分的(每个条件的数据在一个子类PartData中):

代码语言:javascript
复制
class Part {
    // per part data
    final String part_number;

    public Part(String part_number) {
        this.part_number = part_number;
        condition_id_to_data = new HashMap<>();
    }

    public String getPart_number() {
        return part_number;
    }

    Map<Integer, PartData> condition_id_to_data;

    public PartData getData(int condition_id) {
        return condition_id_to_data.get(condition_id);
    }

    // per condition data
    class PartData {
        final int condition_id;

        public PartData(int condition_id) {
            this.condition_id = condition_id;
        }

        BigDecimal sales;
        BigDecimal quotes;

        public BigDecimal getQuotes() {
            return quotes;
        }

        public BigDecimal getSales() {
            return sales;
        }
    }
}

我需要编写一个lambda函数,它将在应用部分/条件时返回数据:

代码语言:javascript
复制
Function<Part, String> part_number_function;
Function<Part, Function<Integer, BigDecimal>> sales_function;
Function<Part, Function<Integer, BigDecimal>> quotes_function;

void go() {

    Part part = ...;
    int condition_id = ...;

    part_number_function = Part::getPart_number; // Got this part
    String part_number = part_number_function.apply(part); // works


    sales_function = Part::getData ... ?
    quotes_function = Part::getData ... ?

    BigDecimal sales = sales_function.apply(part).apply(condition_id);
    BigDecimal quotes = quotes_function.apply(part).apply(condition_id);
}

如何在lambda函数中应用两个变量?

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 12:56:29

当我问这个问题时,我搜索了“两个参数java lambda function”,发现了这个问题:Can a java lambda have more than 1 parameter?

因此,我创建了一个BiFunction类:

代码语言:javascript
复制
@FunctionalInterface
interface BiFunction<One, Two, Three> {
    public Three apply(One one, Two two);
}

这将应用OneTwo并返回Three

并将方法写成这样:

代码语言:javascript
复制
Function<Part, String> part_number_function;
BiFunction<Part, Integer, BigDecimal> sales_function;
BiFunction<Part, Integer, BigDecimal> quotes_function;

void go() {

    Part part = ...;
    int condition_id = ...;

    part_number_function = a_part -> a_part.getPart_number();
    sales_function = (a_part, b_cond) -> a_part.getData(b_cond).sales;
    quotes_function = (a_part, b_cond) -> a_part.getData(b_cond).quotes;

    String part_number = part_number_function.apply(part);
    BigDecimal sales = sales_function.apply(part, condition_id);
    BigDecimal quotes = quotes_function.apply(part, condition_id);
}

这是可行的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50576554

复制
相关文章

相似问题

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