List<WorkItem> newResult=new ArrayList<WorkItem>(); 把数据装进list集合后,如何按时间排序,取前10条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List<WorkItem> newResult=new ArrayList<WorkItem>(); 把数据装进list集合后,如何按时间排序,取前10条相关的知识,希望对你有一定的参考价值。

你说的这个一般在数据库中使用确实比较方便,但是有时不得已在List中操作。
给你介绍两种方法。

这个关键要对时间进行排序:给你一个排序方法
/**
* 排序算法,可以调用这个方法进行倒序 、顺序
* @param list 要进行排序的 List
* @param method 要对list中的对象的那个属性的get方法进行排序 比如 时间 time get方法为getTime() 只需要传入getTime即可
* @param sort 传入字符串 是进行倒序还是逆序
* @return
*/
public void sort(List<WorkItem> list, final String method, final String sort)
Collections.sort(list, new Comparator<Object>()
public int compare(Object a, Object b)
int ret = 0;
try
Method m1 = ((WorkItem)a).getClass().getMethod(method, null);
Method m2 = ((WorkItem)b).getClass().getMethod(method, null);
if(sort != null && "desc".equals(sort))//倒序
ret = m2.invoke(((WorkItem)b), null).toString().compareTo(m1.invoke(((WorkItem)a), null).toString());
else//正序
ret = m1.invoke(((WorkItem)a), null).toString().compareTo(m2.invoke(((WorkItem)b), null).toString());
catch(NoSuchMethodException ne)
logger.error(ne.getStackTrace());
System.out.println(ne);
catch(IllegalAccessException ie)
logger.error(ie.getStackTrace());
System.out.println(ie);
catch(InvocationTargetException it)
logger.error(it.getStackTrace());
System.out.println(it);

return ret;

);

把程序里你要比较的值的类型进行修改。
类中直接引用 this.sort(......);
下面的List 就是一个有序的list了,随便你怎么取了

顺便在和你说一个很好的东西 josql ,为 Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组 你可以在google 中查找出来 官网上有些例子
可以很方便的利用 类似sql 进行List 中对象操作。

我程序中用过的,效果很不错,也简化了代码。

参考资料:http://josql.sourceforge.net/

参考技术A 什么按时间排序呀?List就像数组一样给你先放进去的放第一个位置,然后依次给排呀!放进去后就不能排了!然后你要取,然后就挨着取,他也一定是先放进去的,先取出来那样的 参考技术B 按时间排序? 你的意思应该是WorkItem里有个时间字段吧?

如果是的话 你在写sql语句的时候就应该做了
而不是把所有结果放在list里再排序 取前10
参考技术C 先些个 workItem 按时间的比较方法 进行排序后去前十 参考技术D list没那功能 不行你就用map key存时间 value存你的对象

foreach 内淘汰 foreach

【中文标题】foreach 内淘汰 foreach【英文标题】:Knockout foreach within foreach 【发布时间】:2019-03-16 10:11:10 【问题描述】:

举个例子——

   <!--ko foreach: WorkItems-->
      <tbody data-bind="foreach: ActionPlans">
         // table data here
      </tbody>
   <!--/ko-->

我试图在“此处的表格数据”中仅显示属于当前迭代 WorkItem 的 ActionPlan 项。

问题 -

我的问题是当前“此处的表格数据”显示所有工作项的所有操作计划。

我的模型结构为 Person > WorkItem(array) > ActionPlan(array)

我试过了

   <!--ko foreach: WorkItems-->
      <tbody data-bind="foreach: $parent.ActionPlans">
         // table data here
      </tbody>
   <!--/ko-->

添加 $parent 不会显示任何行动计划...

------------- 按要求编辑 - --------

var PersonViewModel = function(data) 
var self = this;
ko.mapping.fromJS(data, trainingCourseItemMapping, self);

self.addWorkItem = function() 
    var WorkItem = new WorkItemVM(
        Id: null,
        JobSkillsAndExpDdl: "",
        JobSkillsAndExperience: "",
        ActionPlans: ko.observableArray(),
        PersonId: data.Id
        )
   self.WorkItems.push(WorkItem)
;

self.addActionPlan = function () 
    var actionPlan = new ActionPlanVM(
        Id: null,
        priorityAreaStage: "",
        goal: "",
        action: "",
        byWho: "",
        byWhen: ""
        WorkItemId: data.Id
    );
    self.ActionPlans.push(actionPlan);
;

数组映射

var trainingCourseItemMapping = 
'WorkItem': 
    key: function(workitem) 
        return ko.utils.unwrapObservable(workitem.Id);
    ,
    create: function(options) 
        return new WorkItemVM(options.data);
    ,
    'ActionPlans': 
        key: function (actionPlanItem) 
            return ko.utils.unwrapObservable(actionPlanItem.id);
        ,
        create: function (options) 
            return new ActionPlanVM(options.data);
        

    

数组项映射

var WorkItemVM = function(data) 
    var self = this;
    ko.mapping.fromJS(data, trainingCourseItemMapping, self);


var ActionPlanVM = function(data) 
    var self = this;
    ko.mapping.fromJS(data, , self);

编辑 2 ----------

这是渲染的 HTML,您可以看到它渲染了一个 foreach:ActionPlans for each WorkItem with an ActionPlan

【问题讨论】:

你能展示你的javascript代码吗? 谢谢,已添加 JS。 【参考方案1】:

我认为您不需要包含 $parent,因为它已经在 WorkItems binding context 中。

Fiddle

【讨论】:

非常感谢小提琴。我正在使用 ko.mapping 进行 VM 映射,所以我想知道这是否会妨碍您?

以上是关于List<WorkItem> newResult=new ArrayList<WorkItem>(); 把数据装进list集合后,如何按时间排序,取前10条的主要内容,如果未能解决你的问题,请参考以下文章

用户头像模块代码

为啥我的 WorkItem 由于未处理的访问冲突错误而失败?

通过 Wiql (WorkItem) 查询给出错误请求状态

workitem.open() KeyNotFoundException TFS 2013

foreach 内淘汰 foreach

无法从 TFS 中的某些 WorkItem 字段中检索信息