所以有1个班级和1个枚举。枚举例如:
public enum E {
E1, E2, E3
}
班级:
public class A {
private E e;
private String name;
}
给出的是列表。我想要的是根据其名称和枚举属性过滤列表(带有流)。与具有相同枚举属性的其他对象相比,仅筛选出没有最大名称长度的A。
我知道如何按长度过滤A的名称,但不知道如何根据长度与其各自的枚举属性进行比较来过滤。
您可以尝试将列表转换为地图,然后获取过滤后的值
假设: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);