Java 8 Java 8根据列表中的类型对数据进行排序过滤?
我有一个类型为Java 8 Java 8根据列表中的类型对数据进行排序过滤?,java-8,Java 8,我有一个类型为PARENT的数组列表和列表中的子类型,让我们称它们为CHILD1和CHILD2 目前,我的列表看起来像[CHILD1 x,CHILD2 y,CHILD1,a],但我希望将CHILD1元素放在第一位,即 [CHILD1 x,CHILD1 a,CHILD2,y] 在流中是否有可以应用的按类型分组筛选器 假设子类型的数量不是太多,并且您没有处理子类型的其他子类型,您可以简单地按照您想要的顺序创建一个子类型列表,并按列表中的位置排序: List<Class<? extends
PARENT
的数组列表和列表中的子类型,让我们称它们为CHILD1
和CHILD2
目前,我的列表看起来像[CHILD1 x,CHILD2 y,CHILD1,a]
,但我希望将CHILD1
元素放在第一位,即
[CHILD1 x,CHILD1 a,CHILD2,y]
在流中是否有可以应用的按类型分组筛选器 假设子类型的数量不是太多,并且您没有处理子类型的其他子类型,您可以简单地按照您想要的顺序创建一个子类型列表,并按列表中的位置排序:
List<Class<? extends Parent>> order = Arrays.asList(Child1.class, Child2.class, Child3.class, ...);
Comparator<Parent> bySubtype = Comparator.comparing(p -> order.indexOf(p.getClass()));
list.sort(bySubtype); // sort in place
List<Parent> sorted = list.stream()
.sorted(bySubtype)
.collect(Collectors.toList()); // sort into a new list with a stream
list您所要做的就是使用instanceof
或getClass().getName()
编写一个相当简单的Comparator
实现,并将其传递给sorted()
stream方法。这似乎输出了我输入的内容。如何使用instanceof获取实际类型?我在ideone中输入了它,它工作正常:。如果您的代码不起作用,请将其包含在您的问题中。我通过使用的实例执行比较器并根据实例类型返回-1或+1来修复它。谢谢你的初始代码