小编Mu *_* Pi的帖子

Java 8函数样式编程currying和Functions Composition之间的区别是什么

我对函数式编程的世界很陌生.最近我学习了关于currying和方法组合的新功能样式编程.理解使用java的函数式编程的真正本质是非常困难的,现在我有几个问题,但是,在问这些问题之前,我在python上尝试了同样的东西,现在对一些核心概念有点熟悉.

1.在java中如何Currying和方法组成不同实际上我没有看到任何差别,特别是在阅读本文之后https://dzone.com/articles/higher-order-functions

2.作为一个程序员(从我的java编程角度来看)为什么我更喜欢currying.例如,为什么我会这样做, f(x){ return g(y) }而不是它有f(x,y){ return x(y)}什么区别?

java lambda functional-programming currying java-8

5
推荐指数
2
解决办法
817
查看次数

在 Spring MVC 端点中使用多个 Pageable 参数

我有这样的情况

@Autowired
private CustomerRepository repo;

@RequestMapping("/")
public Page<Customer> getDocuments(@Qualifier("bar") Pageable pageable,
                                   @Qualifier("foo")Pageable pageable2)
{
    return repo.findAll(pageable,pageable2.getOffset(), pageable2.getPageSize());
}
Run Code Online (Sandbox Code Playgroud)

但效果不佳。我的问题是,如何区分参数值。

为了实现上述场景,我不得不将我的方法更改为:

@RequestMapping("/")
public Page<Customer> getDocuments(Pageable pageable,
                                   @RequestParam(value="from", defaultValue="0") int offSet,
                                   @RequestParam(value="length", defaultValue="3") int length)
{
    return repo.findAll(pageable, offSet, length);
}
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-data spring-data-jpa

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

我可以使用setter方法替换最终变量,方法如下

我们大多数人都了解共享可变性的后果,并且据说如果你有机会,总是更喜欢不变性(最终修饰符,设置一次,你不能改变它).我已经看到很少的编码示例,其中People实际上将字段final或setter设置为private或甚至删除类的setter(可以是DTO,Model或Entity类)和另一个类(可以将值设置为不可变的一个构建器类) class)用于创建和设置Immutable类的字段确保没有其他类能够修改状态.这似乎是我的负担.所以我想出了这个想法(下面我举一个例子)

public class TestDataClass {

    private String name;

     public String getName() {
        return name;
    }

    public void setName(Supplier<String> supplier) throws Exception {
        if(Objects.isNull(name))
            this.name = supplier.get();
        throw new Exception("This field is immutable and already has a value "+this.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,你可以通过这样的setter设置值,objectOfTestDataClass.setName(() -> {return Perform_Desired_Logic;}); 或者 objectOfTestDataClass.setName(() ->"My Name");它是普通的setter.然后你也不必创建一个bulder类或使setter私有或省略setter方法

通过这种方式,一旦你将字段设置为Immutable(我不考虑反射),我也可以在实例化期间摆脱变量初始化.

我希望您的专家意见能够验证我的想法是否合法,我可以将其视为不变性吗?我错过了什么吗?在那种情况下,请纠正我.

java java-8

2
推荐指数
2
解决办法
531
查看次数