Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 Java 8根据列表中的类型对数据进行排序过滤?_Java 8 - Fatal编程技术网

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来修复它。谢谢你的初始代码