根据字符串长度和属性过滤流

问题描述 投票:0回答:1

所以有1个班级和1个枚举。枚举例如:

public enum E {
 E1, E2, E3
}

班级:

public class A {  
 private E e;
 private String name;
}

给出的是列表。我想要的是根据其名称和枚举属性过滤列表(带有流)。与具有相同枚举属性的其他对象相比,仅筛选出没有最大名称长度的A。

我知道如何按长度过滤A的名称,但不知道如何根据长度与其各自的枚举属性进行比较来过滤。

java stream
1个回答
0
投票

您可以尝试将列表转换为地图,然后获取过滤后的值

假设:A具有以E和Name作为参数的构造函数。我为他们创建了吸气剂。

List<A> input = Arrays.asList(new A(E.E1, "abcd"), new A(E.E1, "xyz"), new A(E.E2, "abcd"), new A(E.E2, "xyz"), new A(E.E3, "xyzb"));

Collection<A> result = input.stream()
    .collect(Collectors.toMap(A::getE, Function.identity(), (n1, n2) -> (n1.getName().length() > n2.getName().length() ? n1 : n2)))
    .values();

System.out.println(result);
© www.soinside.com 2019 - 2024. All rights reserved.