【发布时间】:2019-12-16 21:41:01
【问题描述】:
所以有 1 个类和 1 个枚举。枚举例如:
public enum E {
E1, E2, E3
}
班级:
public class A {
private E e;
private String name;
public A (E e, String name){
this.e = e;
this.name = name;
}
public E getE(){
return E;
}
public String getName(){
return name;
}
}
Given 是一个列表。 我想要的是根据他们的名字和他们的枚举属性过滤列表(带流)。与具有相同枚举属性的其他对象相比,仅筛选出没有最大名称长度的 A。
输出应该是一个 Map>。列出,因为可能存在多个具有相同名称长度的对象。
示例:
List<A> input = Arrays.asList(new A(E.E1, "abcd"), new A(E.E1, "xyz"), new A(E.E2, "abcd"), new A(E.E2, "wxyz"), new A(E.E3, "xyzb"));
这应该返回:
E1 = "abcd" // because "xyz" has length 3
E2 = "abcd", "wxyz" // as both have length 4, e.g. max length
E3 = "xyzb" // because it is the only object
我的一个解决方案是您可以将带有“groupingBy”的列表分组到它们各自的枚举组中。 最后,您将拥有例如 3 个带有 A 列表作为值的键。 最终,您只需删除名称短于最大名称长度的所有值。但仅限于他们各自的关键
【问题讨论】:
-
您需要
group by功能来查找每个枚举值的统计信息。 -
您应该提供示例输入和预期输出。
标签: java java-stream grouping