小编can*_*ani的帖子

JAVA 8将返回值传回同一方法x次

我有这个代码,我想使用Java 8使用函数样式进行重构.我想删除可变对象currentRequest并仍然返回已过滤的请求.

    HttpRequest currentRequest = httpRequest;
    for (Filter filter : filters) {
        currentRequest = filter.doFilter(currentRequest);
    }
Run Code Online (Sandbox Code Playgroud)

目的是将请求传递给filter.doFilter方法,并获取输出并将其传递回filter.doFilter方法,并继续执行此操作直到应用所有筛选器.

例如,以更复杂的方式转换为for循环

    HttpRequest filteredRequest1 = filters.get(0).doFilter(currentRequest);
    HttpRequest filteredRequest2 = filters.get(1).doFilter(filteredRequest1);
    HttpRequest filteredRequest3 = filters.get(2).doFilter(filteredRequest2);
    ...
Run Code Online (Sandbox Code Playgroud)

我认为这是组合函数的一种情况,doFilter方法应该是如下函数:

    Function<HttpRequest, HttpRequest> applyFilter = request -> filters.get(0).doFilter(request);
Run Code Online (Sandbox Code Playgroud)

但我知道这是完全错误的,因为我被困在这里.

我想的另一种方法是使用reduce,但在这种情况下我看不到使用它的方法.

如果你可以帮我解决这个问题,或者指出一些非常好的资源.

java refactoring functional-programming

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

使用比较器对列表列表进行排序

我正在考虑使用比较器整理出一个列表列表(在 ArrayLists 上)。订单最大的地方。所有子列表将始终具有相同的大小。

例如,一个列表

[[4,5,6], [7,9,10], [4,7,8], [1,2,3], [7,9,12]]
Run Code Online (Sandbox Code Playgroud)

这应该

[[7,9,12], [7,9,10], [4,7,8], [4,5,6], [1,2,3]]
Run Code Online (Sandbox Code Playgroud)

我有这样的东西,但只按每个列表中的第一项排序

List<List<Integer>> list = Arrays.asList(
                Arrays.asList(4,5,6),
                Arrays.asList(7,9,10), 
                Arrays.asList(4,7,8),
                Arrays.asList(1,2,3), 
                Arrays.asList(7,9,12));

list.sort((l1, l2) -> l2.get(0).compareTo(l1.get(0)));
Run Code Online (Sandbox Code Playgroud)

其中产生:

[[7, 9, 10], [7, 9, 12], [4, 5, 6], [4, 7, 8], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

如何编写比较器,如果前一项相等,则按列表中的下一项进行排序?

例如,[7, 9, 10], [7, 9, 12] 应该继续比较两个 7,然后是两个 9,然后是 10 和 12。例如,[4, 5, 6], [4, 7, 8] 应该继续比较两个 4,然后 4 和 7 并停止。

java sorting oop algorithm functional-programming

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