项目场景:
现有一个List对象集合,需要根据其中一个字符串类型的字段进行排序,例如将threadStatus="Running"的排在最后面,剩下的其他值任意排,然后取排序后的集合的第一条数据。
代码部分:
public static void main(String[] args){ List<ThreadModel> data = new ArrayList<>(); data.add(new ThreadModel("New")); data.add(new ThreadModel("Runnable")); data.add(new ThreadModel("Running")); data.add(new ThreadModel("Blocked")); data.add(new ThreadModel("DEAD")); data.add(new ThreadModel("Running")); List<ThreadModel> sortedData = data.stream() .sorted(((Comparator<ThreadModel>)(o1, o2) -> { if (o1.getThreadStatus().equals("Running")) { return -1; }else{ return 0; } }).reversed()).collect(Collectors.toList()); sortedData.forEach(e->{ System.out.println(e.getThreadStatus()); }); } static class ThreadModel{ private String threadStatus; public ThreadModel(String threadStatus) { this.threadStatus = threadStatus; } public String getThreadStatus() { return threadStatus; } }
备注:如果其他状态也需要排序可根据实际情况修改对应的if else,升序还是降序可根据o1和o2或者使用reversed()进行调整。