相关疑难解决方法(0)

如何使用Java8 lambda以相反的顺序对流进行排序?

我正在使用java lambda对列表进行排序.

我怎样才能以相反的方式对它进行排序?

我看到这篇文章,但我想使用java 8 lambda.

这是我的代码(我使用*-1)作为黑客

Arrays.asList(files).stream()
    .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName()))
    .sorted(new Comparator<File>() {
        public int compare(File o1, File o2) {
            int answer;
            if (o1.lastModified() == o2.lastModified()) {
                answer = 0;
            } else if (o1.lastModified() > o2.lastModified()) {
                answer = 1;
            } else {
                answer = -1;
            }
            return -1 * answer;
        }
    })
    .skip(numOfNewestToLeave)
    .forEach(item -> item.delete());
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

154
推荐指数
6
解决办法
24万
查看次数

java lambda返回一个lambda

我试图在功能编程的新jdk8版本中做一些看起来相对基本的东西,但是无法让它工作.我有这个工作代码:

import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;

public class so1 {
   public static void main() {
      List<Number> l = new ArrayList<>(Arrays.asList(1, 2, 3));
      List<Callable<Object>> checks = l.stream().
               map(n -> (Callable<Object>) () -> {
                  System.out.println(n);
                  return null;
               }).
               collect(Collectors.toList());
   }
}
Run Code Online (Sandbox Code Playgroud)

它需要一个数字列表并生成一个可以打印出来的函数列表.然而,显式转换为Callable似乎是多余的.对我和IntelliJ来说似乎.我们都同意这也应该有效:

List<Callable<Object>> checks = l.stream().
       map(n -> () -> {
          System.out.println(n);
          return null;
       }).
       collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

so1.java:10: error: incompatible types: cannot infer type-variable(s) R
      List<Callable<Object>> checks = l.stream().map(n -> () -> {System.out.println(n); return null;}).collect(Collectors.toList());
                                                    ^
    (argument mismatch; bad return type …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8

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

比较然后比较给出编译错误

我正在尝试List按名称对员工进行排序,然后使用Java8 Comparator,我在下面创建Comparator但是它给了我一个编译器错误

Type mismatch: cannot convert from Comparator<Object> to <unknown>

    Comparator<String> c = Comparator.comparing(s -> s.split("\\s+")[0])
            .thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //compile error
Run Code Online (Sandbox Code Playgroud)

但是如果我明确指定Type,它就可以工作

    Comparator<String> c = Comparator.<String, String> comparing(s -> s.split("\\s+")[0])
            .thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //works
Run Code Online (Sandbox Code Playgroud)

或者通过创建两个Compartors和链

    Comparator<String> name = Comparator.comparing(s -> s.split("\\s+")[0]);
    Comparator<String> age = Comparator.comparingInt(s -> Integer.parseInt(s.split("\\s+")[1]));
    Comparator<String> cc = name.thenComparing(age); //works
Run Code Online (Sandbox Code Playgroud)

我已Comparator<String>在左侧指定了类型,但为什么自动类型推断未找到正确的类型并期望明确指定.

有人可以澄清一下吗?

这是代码

    String[] arr = { "alan 25", "mario 30", "alan 19", "mario 25" };
    Comparator<String> c = …
Run Code Online (Sandbox Code Playgroud)

java comparable comparator java-8

8
推荐指数
1
解决办法
2032
查看次数