首页 > 解决方案 > Java Array 根据子类中的变量对对象列表进行排序

问题描述

我有一个父类“内容”它的两个子类“文档”和“评估”。

@Document(collection = "content")
public class Content {
@Id
  private String id;
  private String name;
//this type is from enum
  private Type type;

}
public enum Type {
  DOCUMENT,
  ASSESSMENT
}
public class Document extends Content {
   private String priority;
}

public class Assessment extends Content {
   private String priority;
}

public interface ContentRepository extends MongoRepository<Content, String> {
  Page<Content> findAllByTypeIn(List<Type> types, Pageable pageable);
}

在服务层中,我得到了内容列表。

Pageable pageable = PageRequest.of(page, size);
  List<Type> typeList = Arrays.asList(Type.DOCUMENT, Type.ASSESSMENT);
  Page<Content> contents = contentRepository.findAllByTypeIn(typeList , pageable);
List<Content> contents = contents.getContent();
**//need to order this List**

在这里,我得到一个类型为 DOCUMENT 或 ASSESSMENT 的内容列表。我需要根据优先级订购此列表。注意:优先级在两个子类中。我无法将其移至超类,因为该父类的更多子类没有此“优先级”变量。

标签: javaspring-bootjava-stream

解决方案


我想说为包含的类创建另一个中间抽象priority。根据设计标准,这也是正确的。这样您就可以轻松地使用该字段对其进行排序。

PriorityContent扩展类的东西Content。并且将扩展Document而不是.AssessmentPriorityContentContent

在此处输入图像描述


推荐阅读