我有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/