java - 使用 Stream 和 lambda 对 java 对象进行多项操作

标签 java lambda java-stream

我有A类{int sNo;具有有效构造函数的字符串名称;。 我需要修剪名称并使用流 API 根据名称进行排序。

public class Test1 {
    public static void main(String[] args) {



    ArrayList<A> l = new ArrayList();
    l.add(new A(1, " 1name "));
    l.add(new A(7, " 3name "));
    l.add(new A(6, ""));
    l.add(new A(5, " 2name "));
    l.add(new A(4, " 5name "));
    l.add(new A(2, ""));

    List<String> i = l.stream()
            .filter(s -> !s.name.isEmpty())
            .map(s -> s.name.trim())
            .sorted()
            .collect(Collectors.toList());
    System.out.println(i); 
}

它仅按排序顺序返回名称

[, 1name, 2name, 3name, 5name]

但我需要整个对象。

我知道 s -> s.name.trim() 是它只存储名称的原因,

如何在特定字段上应用操作但存储整个对象。

最佳答案

只是为了好玩,而不是因为它特别好甚至推荐。也可以使用匿名对象来实现这一点:

    List<A> i = l.stream()
            .filter(s -> !s.name.isEmpty())
            .map(s -> new Object() {A a = s; String name = s.name.trim();})
            .sorted(Comparator.comparing(o -> o.name))
            .map(o -> o.a)
            .collect(Collectors.toList());

不是每个编译器都会对此感到高兴(javac 会),但它是有效的 Java 代码。

关于java - 使用 Stream 和 lambda 对 java 对象进行多项操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118712/

相关文章:

java - Jersey 在解析损坏的请求时抛出 NullPointerException

java - 当我进入循环时我无法退出

java - 使用按钮启动/停止 Windows 服务

c# - 使用动态生成的 lambda 调用通用扩展

java - 使用 Lambda 表达式参数化的 Vert.x 日志语句

java - 将多行日志文件分解为事件流或迭代器

java - 创建多个 SSL 连接池

c# - 用委托(delegate)或 lambda 包装秒表计时?

java - 如何将流收集到 TreeMap 中

java - executor.invokeAll() 未完成执行