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]]

Comparator分组测试的更多相关文章

  1. testNG groups 分组测试

    testNG的分组通过xml文件<groups>标签和@Test(group="组名")来实现分组 xml中关于分组的详细介绍,通过groups 定义一个组,通过< ...

  2. 十、TestNG分组测试

    使用 groups 属性 package com.lc.tesgFenZu; import org.testng.annotations.AfterGroups; import org.testng. ...

  3. TestNg 4.组测试中的方法分组测试

    看以下代码: package com.course.testng.groups; import org.testng.annotations.AfterGroups; import org.testn ...

  4. TestNG分组测试

    分为方法的分组和类的分组: GroupsOnMethod类: package com.janson.groups; import org.testng.annotations.Test; public ...

  5. TestNG(八) 类分组测试

    package com.course.testng.groups; import org.testng.annotations.Test; @Test(groups = "stu" ...

  6. bash脚本编程之二 字符串测试及for循环

    shell中大量的测试和比较选项而困惑呢? 这个技巧可以帮助您解密不同类型的文件.算术和字符串测试,这样您就能够知道什么时候使用 test. [ ]. [[ ]].(( )) 或 if-then-el ...

  7. Nightwatch.js – 轻松实现浏览器的自动测试

    Nightwatch.js 是一个易于使用的,基于 Node.js 平台的浏览器自动化测试解决方案.它使用强大的 Selenium WebDriver API 来在 DOM 元素上执行命令和断言. 语 ...

  8. QUnit使用笔记-4保持原子性与分组

    原子性: 当将许多测试用例放到一起测试的时候,可能会因为相互的副作用而出错:这个时候应该尽可能将他们分别放到test()中测试: 对应测试到Dom,应该尽可能地使用#qunit-fixture,因为它 ...

  9. TestNG的组测试和组中组测试

    在编写测试的过程中,我们经常遇到只想执行个别或者某一部分/某一类型的测试用例,这时我们可以使用TestNG的分组测试方法 分组测试在配置时,TestNG执行的原则是:只保留最小集合进行执行 看代码: ...

随机推荐

  1. 【ABAP系列】ABAP CL_ABAP_CONV_IN_CE

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]ABAP CL_ABAP_CON ...

  2. 卸载未能成功安装的mysql时的解决方案

    在win10系统中,首次未能成功安装mysql,于是试图卸载了mysql相关的应用,结果提示有卸载未完成的应用,无法卸载, 在阅读文档之后发现,可以在任务管理器中的详细信息中找到[dllhost.ex ...

  3. 忘记Linux的root登录密码?不用害怕,破解掉它就可以了!!!

    在开启centos 7主机后会出现下面这个界面,此时要把光标放到界面内,然后按“e”进入下一个界面. 按完“e”会出现一个新的界面,然后按“↓”找到“Linux16”这行,在最后面的UTF-8后面输入 ...

  4. Java学习笔记-包装类

    基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换 包装类的由来 为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类(Wrapper ...

  5. js中构造函数与普通函数的区别

    构造函数不仅只出现在JavaScript中,它同样存在于很多主流的程序语言里,比如c++.Java.PHP等等.与这些主流程序语言一样,构造函数在js中的作业一样,也是用来创建对象时初始化对象,并且总 ...

  6. 小菜鸟之oracle触发器

    1.触发器说明 触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用 2.触发器类型 根据触发器所创建的语句及所影响的对象的不同,将触发器分为以下3类 (1)DML触发 ...

  7. MQ解决消息重发--做到幂等性

    一.MQ消息发送 1.发送端MQ-client(消息生产者:Producer)将消息发送给MQ-server: 2.MQ-server将消息落地: 3.MQ-server回ACK给MQ-client( ...

  8. python学习-5 python基础-2 条件语句(if的简单用法2---elif)

    1.if的基本语句 if条件: 内部代码块 else: ........ print(‘.......’) 2.if语句支持嵌套 if条件: 内部代码块 if条件: 内部代码块 else: ..... ...

  9. Ansible 自动化工具入门

    Ansible 配置 Ansible 简单管理 下面的小实验,我们将采用以下的IP地址规划,请自行配置好. [实验环境] [状态] [主机列表] [python版本] 控制机 192.168.1.10 ...

  10. 选项卡TAB

    一.基础信息 关键class名:nav 写法: (1)头部选中状态:class="active" (2)头部按钮进行切换:<a>加data-toggle="t ...