首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态谓词、函数与功能方法的代价

动态谓词、函数与功能方法的代价
EN

Stack Overflow用户
提问于 2021-09-05 10:53:34
回答 1查看 118关注 0票数 2

我开始熟悉Java了,有些特性我非常喜欢,例如在.filter()中使用Predicate,与.map()一起使用Function。这是一种非常好的功能方法。关于这个代码,我有三个问题:

代码语言:javascript
复制
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;

public class ProcessList {

    public static void main(String[] args) {

        List<Integer> numbers = Arrays.asList(1, 4, 3, 2, 14, 1, -1, 0, 1, 5, 9, 0, 1);
        Predicate<Integer> gt3 = (n) -> n > 3;
        Function<Integer, Integer> plus11 = (n) -> n + 11;

        List<Integer> numbersProcessed = numbers
                .stream()
                .filter(gt3)
                .map(plus11)
                .toList();
    }
}

  1. at Predicate:目前,数字3是硬编码的。假设我想要一个在运行时创建的动态谓词,例如(n) -> n > x,其中x是一些整数。如何创建动态谓词对象?我用new Predicate()尝试了一些东西,但这似乎不对。

  1. 与1.关于Function:假设我不想要加11,但是需要(n) -> n + xx是在运行时提供的一些整数。如何创建动态函数对象?

  1. .filter().map().toList()操作让我想到: Java在设计上不是一种函数式语言。由于函数语言的本质是始终操纵列表,因此这些语言被优化以不断从现有的列表中生成新的列表,因此函数语言原则上不允许对对象进行就地操作。我想知道:比如说,有一个大清单,里面有数百万件物品。这类列表操作会对Java的性能产生重大影响吗?本质上:在Java中使用功能方法的成本是多少?

非常感谢,祝您今天愉快。

EN

回答 1

Stack Overflow用户

发布于 2021-09-05 11:27:55

您可以创建如下方法:

代码语言:javascript
复制
Predicate<Integer> gt(Integer number) {
    return (n) -> n > number;
}

并使用Map<Integer, Predicate<Integer>>存储这些值。您可以实现这样的getter:

代码语言:javascript
复制
Predicate<Integer> getGt(Map<Integer, Predicate<Integer>> gtMap, Integer key) {
    if (!gtMap.containsKey(key)) gtMap.put(key, gt(key));
    return gtMap.get(key);
}

至于第三个问题,我建议做一些实验,并阅读一些关于它的文章。

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

https://stackoverflow.com/questions/69062714

复制
相关文章

相似问题

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