针对形如:
字段1 字段2 字段3 字段n 1 hello 26 789
1 world 89 556
2 what 55 456
2 the 85 45
2 fuck 55 99
5 haha 98 455 以上类型的查询数据结果,需要对 字段3 进行求和分组(在SQL查询无法一次性完成的情况下,通常采用Java分组排序),大概思路如下: 1、在Bean中添加相关的分组标记字段,对求和或者其它统计的结果进行插入分组标记,下面demo中为bigIdOrder标记 2、对完成标记的List进行标记的补全 3、对补全的List按照标记进行排序 PS:非常不赞成在前端用JS/JQ等进行排序,非常费劲,并且数组还会发生不可知的变化,笔者吃过亏(算法高手除外),笔者编码水平有限,写的不到位的地方恳请大神们批评指正。 因编码直接来源于项目,变量名未做统一demo化,现给出提示:
bigId:字段1
pinci:字段3
bigIdOrder:标记字段(可自定义)

        JSONObject json = new JSONObject();
String dataType = request.getParameter("dataType");
String channelId = request.getParameter("channelId");
String order = request.getParameter("type");
setMapTimeRight(dataType, 0); map.put("channelId", channelId);
map.put("order", order); try {
List<UnconventionBrandAnalyseByBrand> now = this.service
.unconventionBrandSituation(map); //1、产生组装排序条件字段数据标记
int bigIdOrder=0;
int i=-1;
int i2=0;
List bigIdOrderArray = new ArrayList(); for(UnconventionBrandAnalyseByBrand un : now){
i++;
//如果当前bigId与前一个bigId相等,则将该id视为一个id(bigIdOrder),对该id所对应的所有频次数进行累加
if(i==0
&&now.get(0).getBigId().equals(now.get(1).getBigId())){
//第一次计数后有(非分组条件)
bigIdOrder = bigIdOrder+Integer.parseInt(now.get(i).getPinci());
}else if(i>0
&&i<now.size()-1
&&!now.get(i).getBigId().equals(now.get(i-1).getBigId())
&&now.get(i).getBigId().equals(now.get(i+1).getBigId())){
//前不同后相同(非分组条件)
bigIdOrder = bigIdOrder+Integer.parseInt(now.get(i).getPinci());
}else if(i>0
&&i<now.size()-1
&&now.get(i).getBigId().equals(now.get(i+1).getBigId())
&&now.get(i).getBigId().equals(now.get(i+1).getBigId())){
//前相同后相同(非分组条件)
bigIdOrder = bigIdOrder+Integer.parseInt(now.get(i).getPinci());
}else{
//分组条件
bigIdOrder = bigIdOrder+Integer.parseInt(now.get(i).getPinci()); un.setBigIdOrder(bigIdOrder+"");//添加分组标识(int类型bigIdOrder) bigIdOrderArray.add(i2, bigIdOrder+""); i2++;
bigIdOrder = 0;
}
} // 2、补全产生组装排序条件字段数据标记
int ii = 0;
int ng = 0;// 非分组条件计数器
for (UnconventionBrandAnalyseByBrand un : now) {
// 如果当前bigId与前一个bigId相等,则将该id视为一个id(bigIdOrder),对该id所对应的所有频次数进行累加 if (ii == 0
&& !now.get(0).getBigId().equals(now.get(1).getBigId())) {
// 第一次计数后无(分组条件)
} else if (ii > 0
&& i < now.size() - 1
&& now.get(ii).getBigId().equals(
now.get(ii - 1).getBigId())
&& !now.get(ii).getBigId().equals(
now.get(ii + 1).getBigId())) {
// 前同后不同(分组条件)
} else if (ii == now.size() - 1
&& now.get(ii).getBigId().equals(
now.get(ii - 1).getBigId())) {
// 后无前同(分组条件)
} else if (ii == now.size() - 1
&& !now.get(ii).getBigId().equals(
now.get(ii - 1).getBigId())) {
// 后无前不同(分组条件)
} else {
// 非分组条件
if (ii == 0) {
un.setBigIdOrder(bigIdOrderArray.get(0).toString());
} else if (!now.get(ii).getBigId().equals(
now.get(ii - 1).getBigId())) {
ng++;
un.setBigIdOrder(bigIdOrderArray.get(ng).toString()); } else {
un.setBigIdOrder(bigIdOrderArray.get(ng).toString());
}
}
ii++;
} // 3、开始排序采用对象比较器
Comparator<UnconventionBrandAnalyseByBrand> comparator = new Comparator<UnconventionBrandAnalyseByBrand>() {
public int compare(UnconventionBrandAnalyseByBrand s1,
UnconventionBrandAnalyseByBrand s2) {
// 排序标记
int ret = 0;
if (s1.getBigIdOrder() != s2.getBigIdOrder()) {
ret = Integer.parseInt(s1.getBigIdOrder())
- Integer.parseInt(s2.getBigIdOrder());
}
return ret > 0 ? -1 : 1;// 升序或者降序改变-1和1的位置即可
} }; //开始自动排序
Collections.sort(now,comparator); json.put("data", now); try {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter(); out.print(json);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;

Java对象比较器对泛型List进行排序-Demo的更多相关文章

  1. java对象比较器和克隆

    一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要 ...

  2. JAXB实现java对象与xml之间转换

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

  3. 总结学习! xml与java对象转换 --- JDK自带的JAXB(Java Architecture for XML Binding)

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  4. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  5. JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/对象的克隆/二叉树

    /** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] ...

  6. Java如何操作对象(bean)进行动态排序?

    原文出自:https://blog.csdn.net/seesun2012 简介如题:Java如何操作对象(bean)进行动态排序?Java实体类(bean)动态排序? 原理:利用反射根据指定的属性值 ...

  7. 如何使用 Java 对 List 中每个对象元素按时间顺序进行排序

    如何使用 Java 对 List 中每个对象元素按时间顺序进行排序 Java 实现 import java.text.SimpleDateFormat; import java.util.ArrayL ...

  8. 第50节:Java的当中的泛型

    Java当中的泛型 01 import java.util.ArrayList; import java.util.List; public class Demo{ public static voi ...

  9. Java的当中的泛型

    Java当中的泛型 01 import java.util.ArrayList; import java.util.List; public class Demo{ public static voi ...

随机推荐

  1. C# 字段、属性、成员变量

    引言: C#与java,C++中的这些基本概念略有不同. 由于easy混淆,所以这里总结下差别. 希望能对刚開始学习的人有帮助! 一.定义与作用 1.字段(field):是C#类级别定义的,和方法同一 ...

  2. Codeforces 459E Pashmak and Graph(dp+贪婪)

    题目链接:Codeforces 459E Pashmak and Graph 题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径. 解题思路:将边依 ...

  3. android 更新实现自己主动

    其主要原理是: 在应用程序启动.取server在版本 , 以下这个是获取当前应用的版本号信息 private void getCurVersion() { try { PackageInfo pInf ...

  4. 【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    列表显示,顾名思义它是在一个列表视图的形式显示在屏幕上的数据的内容.于ios在列表视图UITableView达到.这个类在实际应用中频繁,是很easy理解.这里将UITableView的主要使用方法总 ...

  5. MySQL多实例配置(两)

    MySQL操作和维护一个集中的数据库的.它可以由一个单一的执行MySQL在数据库服务器,部署多MySQL示例.这个功能是由mysqld_multi实现.mysqld_multimysqld的服务进程. ...

  6. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  7. Google调试技巧总结

    工欲善其事 工欲善其事,必先利器. Google调试面板一一介绍:F12回想一下大家都应该知道,哈哈 element面板 这个面板显示了页面所有html代码.用于调试css代码.右側展示左側相应选择元 ...

  8. 关于Java和.NET之间的通信问题(JSON)

    前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...

  9. Cocos2d-x 文本渲染

     文本渲染: CCLabelAtlas.CCLabelBMFont.CCLabelTTF类都是继承 CCLabelProtocol类,即能够使用系统字,也能够自己定义渲染字体. CCLabelAtla ...

  10. unity3d 学习笔记_____Native2d 刚体、冲击、联合使用

    Mass Mass of the rigidbody. Linear Drag Drag coefficient affecting positional movement. Angular Drag ...