import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; /**
* @author 马家立
* @version 创建时间:2019年9月18日
* @Description:TODO Comparator分组测试
*/
public class ComparatorGroup {
class Nubia {
public String name;// 手机名称
public String color;// 颜色
public int weight;// 重量 public Nubia(String name, String color, int weight) {
super();
this.name = name;
this.color = color;
this.weight = weight;
} @Override
public String toString() {
return "Nubia [name=" + name + ",color=" + color + "色, weight=" + weight + "g]";
}
} /**
* @Title:divider
* @author:马家立
* @date:2019年9月17日
* @Description:TODO 按条件分组
* @param <T>
* @param datas_待分组的数据List
* @param condition_是否为同一组的判断条件
* @return List<List<T>>
*/
public static <T> List<List<T>> divider(Collection<T> datas, Comparator<? super T> condition) {
// 初始化话分组List<List<T>>
List<List<T>> result = new ArrayList<List<T>>();
// 是否为同一组数据的标识
boolean isSameGroup = false;
// 遍历待分组的完整List数据
for (T data : datas) {
isSameGroup = false;
for (int j = 0; j < result.size(); j++) {
if (condition.compare(data, result.get(j).get(0)) == 0) {
isSameGroup = true;
result.get(j).add(data);
break;
}
}
if (!isSameGroup) {
// 创建分组List
List<T> groupList = new ArrayList<T>();
result.add(groupList);
groupList.add(data);
}
}
return result;
} /**
* @Title:sortListNubia
* @author:马家立
* @date:2019年9月17日
* @Description:TODO 对分组的List按重量升序排列
* @param sortNubia待排序的List
* void
*/
public static void sortListNubia(List<List<Nubia>> sortNubia) {
// 对分组的List按重量升序排列
Comparator<List<Nubia>> comparator = new Comparator<List<Nubia>>() {
@Override
public int compare(List<Nubia> nb1, List<Nubia> nb2) {
return nb1.get(0).weight - nb2.get(0).weight;
}
};
Collections.sort(sortNubia, comparator);
} /**
* @Title:main
* @author:马家立
* @date:2019年9月17日
* @Description:TODO main函数测试
* @param args
* void
*/
public static void main(String[] args) {
// 初始化List数据
List<Nubia> list = new ArrayList<>();
list.add(new ComparatorGroup().new Nubia("努比亚z7mini", "黑金", 143));
list.add(new ComparatorGroup().new Nubia("努比亚z11mini", "黑金", 138));
list.add(new ComparatorGroup().new Nubia("努比亚红魔Mars", "黑红", 193));
list.add(new ComparatorGroup().new Nubia("努比亚红魔3 ", "黑红", 215));
list.add(new ComparatorGroup().new Nubia("努比亚X", "蓝银", 181));
list.add(new ComparatorGroup().new Nubia("努比亚布拉格 ", "蓝银", 140));
// 按颜色分组
List<List<Nubia>> byColors = divider(list, new Comparator<Nubia>() {
@Override
public int compare(Nubia nb1, Nubia nb2) {
// 按颜色分组
return nb1.color.compareTo(nb2.color);
}
});
// 按重量升序
sortListNubia(byColors);
System.out.println("按颜色分组:");
for (List<Nubia> list2 : byColors) {
System.out.println(list2);
}
// 按重量分组
List<List<Nubia>> byWeight = divider(list, new Comparator<Nubia>() {
@Override
public int compare(Nubia nb1, Nubia nb2) {
// 按重量区间
return ((nb1.weight / 30) == (nb2.weight / 30)) ? 0 : 1;
}
});
// 按重量升序
sortListNubia(byWeight);
System.out.println("按重量级分组:");
for (List<Nubia> list2 : byWeight) {
System.out.println(list2);
}
}
}

运行结果:

按颜色分组:
[Nubia [name=努比亚z7mini,color=黑金色, weight=143g], Nubia [name=努比亚z11mini,color=黑金色, weight=138g]]
[Nubia [name=努比亚X,color=蓝银色, weight=181g], Nubia [name=努比亚布拉格 ,color=蓝银色, weight=140g]]
[Nubia [name=努比亚红魔Mars,color=黑红色, weight=193g], Nubia [name=努比亚红魔3 ,color=黑红色, weight=215g]]
按重量级分组:
[Nubia [name=努比亚z7mini,color=黑金色, weight=143g], Nubia [name=努比亚z11mini,color=黑金色, weight=138g], Nubia [name=努比亚布拉格 ,color=蓝银色, weight=140g]]
[Nubia [name=努比亚红魔Mars,color=黑红色, weight=193g], Nubia [name=努比亚X,color=蓝银色, weight=181g]]
[Nubia [name=努比亚红魔3 ,color=黑红色, weight=215g]]

最新文章

  1. 关于 devbridge-autocomplete 插件多选操作的实现方法
  2. Linux下修改Mysql的用户(root)的密码
  3. 单元测试 逃不开的Done 与约定
  4. Tcc学习笔记(一) 开篇
  5. SQL Server:孤立用户详解
  6. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测
  7. Sql Server 2012 的新分页方法分析(offset and fetch) - 转载
  8. I.MX6 lcd lvds hdmi bootargs
  9. Android开源项目发现---GridView 篇(持续更新)
  10. jQuery(二)
  11. Cassandra C++/NodeJs开发环境
  12. Java平台与.Net平台在服务器端前景预测
  13. 翻译:MariaDB DATABASE()
  14. js设置document.domain实现跨域
  15. Vue 项目集合
  16. Kafka API: TopicMetadata
  17. BZOJ 2151 种树(循环链表)
  18. DQ8通关攻略
  19. gem install mysql遇到问题。解决方案
  20. vmware虚拟机安装MAC OSX10.10Yosemite简要记录

热门文章

  1. 微信小程序文字超过行后隐藏并且显示省略号
  2. 【手记】解决Intel Management Engine Interface黄色感叹号
  3. Milo-OPC UA处理Subscription和Triggering
  4. vue学习中遇到的问题
  5. 【计算机】DMA原理1
  6. redis同步到磁盘
  7. Mysql性能优化之---(一)
  8. Spring4学习回顾之路11-AOP
  9. NIT校赛-- 雷顿女士与分队
  10. 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中