今天要说的是给List分组,然后用Map来封装,可能你看了以后还是有一些模糊。

先看一下项目结构图:

User类是一个VO类,主要逻辑还是在MapTestBak上面。

运行效果:

原理图:

1.在starsList中有两组人,共三人

2.在dolList中有一组人,共两人

3.经过marched操作,最后匹配到一组人到result中。即第一组人。

原理很简单。

===================================================

源码部分:

===================================================

/mapTest/src/com/b510/map/MapTestBak.java

 /**
*
*/
package com.b510.map; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @author Hongten
* @created Apr 28, 2014
*/
public class MapTestBak { public static void main(String[] args) {
mapTest();
} /**
*
*/
private static void mapTest() {
// starsList
List<User> starsList = getStarsList(); // dolList
List<User> dolList = getDolList(); Map<String, List<User>> map = groupingHandler(starsList);
// test
groupingHandlerTest(map); System.out.println("======= group finished =======");
List<Map<String, List<User>>> compareResultList = compare(dolList, map);
if(null != compareResultList){
System.out.println(compareResultList.size());
}
} /**
* @param dolList
* @param map
*/
private static List<Map<String, List<User>>> compare(List<User> dolList, Map<String, List<User>> map) {
List<Map<String, List<User>>> tempList = new ArrayList<Map<String, List<User>>>();
if (null != map) {
for (String key : map.keySet()) {
List<User> u = map.get(key);
List comList = new ArrayList();
boolean comFlag = true;
for (User us : u) {
List comList1 = new ArrayList();
for (User ul : dolList) {
if (us.getGroupNO() == ul.getGroupNO() && us.getName().trim().equals(ul.getName().trim())) {
comList1.add(1);
} else {
comList1.add(0);
}
}
if (comList1.contains(1)) {
// name has existed.
comList.add(1);
} else {
comList.add(0);
}
}
if (comList.contains(0)) {
comFlag = false;
}
// print out the match result in the console.
printMatchResult(tempList, key, u, comFlag);
}
}else{
System.out.println("map is null!");
}
return tempList;
} /**
* @param tempList
* @param key
* @param u
* @param comFlag
*/
private static void printMatchResult(List<Map<String, List<User>>> tempList, String key, List<User> u, boolean comFlag) {
if (comFlag) {
// do something
System.out.println("group : " + key + " compared!\n Detail:");
System.out.println("================");
for (User ut : u) {
System.out.println(ut.getGroupNO() + ", " + ut.getName());
}
System.out.println("================");
Map<String, List<User>> tempMap = new HashMap<String, List<User>>();
tempMap.put(key, u);
tempList.add(tempMap);
} else {
System.out.println("group : " + key + " NOT compared!");
}
} /**
* @param map
*/
private static void groupingHandlerTest(Map<String, List<User>> map) {
if (null != map) {
for (String key : map.keySet()) {
List<User> u = map.get(key);
for (User u1 : u) {
System.out.println(u1.getGroupNO() + ", " + u1.getName());
}
}
}
} /**
* @param starsList
* @param map
*/
private static Map<String, List<User>> groupingHandler(List<User> starsList) {
Map<String, List<User>> map = new HashMap<String, List<User>>();
for (User stars_user : starsList) {
String no = String.valueOf(stars_user.getGroupNO());
if (map.isEmpty()) {
List<User> l = new ArrayList<User>();
l.add(stars_user);
map.put(no, l);
} else {
List<User> user_map = map.get(no);
if (null == user_map || "".equals(user_map)) {
List<User> l = new ArrayList<User>();
l.add(stars_user);
map.put(no, l);
} else {
List<User> l = map.get(no);
l.add(stars_user);
map.put(no, l);
}
}
}
return map;
} /**
* @param dolList
*/
private static List<User> getDolList() {
List<User> dolList = new ArrayList<User>();
User user_B1_dol = new User(1, "MRS KON");
User user_A_dol = new User(1, "KON SUE");
dolList.add(user_B1_dol);
dolList.add(user_A_dol);
return dolList;
} /**
* @param starsList
*/
private static List<User> getStarsList() {
List<User> starsList = new ArrayList<User>();
User user_B1 = new User(1, "MRS KON");
User user_A = new User(1, "KON SUE");
User user_B2 = new User(2, "MRS KON");
User user_C = new User(2, "LON MEI");
starsList.add(user_B1);
starsList.add(user_A);
starsList.add(user_B2);
starsList.add(user_C);
return starsList;
}
}

/mapTest/src/com/b510/map/User.java

 /**
*
*/
package com.b510.map; /**
* @author Hongten
* @created Apr 28, 2014
*/
public class User { private int groupNO;
private String name; public int getGroupNO() {
return groupNO;
} public User(int groupNO, String name) {
this.groupNO = groupNO;
this.name = name;
} public void setGroupNO(int groupNO) {
this.groupNO = groupNO;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }

我想要记录一下的是方法:compare(List<User> dolList, Map<String, List<User>> map)

 private static List<Map<String, List<User>>> compare(List<User> dolList, Map<String, List<User>> map) {
List<Map<String, List<User>>> tempList = new ArrayList<Map<String, List<User>>>();
if (null != map) {
for (String key : map.keySet()) {
List<User> u = map.get(key);
List comList = new ArrayList();
boolean comFlag = true;
for (User us : u) {
List comList1 = new ArrayList();
for (User ul : dolList) {
if (us.getGroupNO() == ul.getGroupNO() && us.getName().trim().equals(ul.getName().trim())) {
comList1.add(1);
} else {
comList1.add(0);
}
}
if (comList1.contains(1)) {
// name has existed.
comList.add(1);
} else {
comList.add(0);
}
}
if (comList.contains(0)) {
comFlag = false;
}
// print out the match result in the console.
printMatchResult(tempList, key, u, comFlag);
}
}else{
System.out.println("map is null!");
}
return tempList;
}

在这个方法中,这里使用了两个List(即:comList, comList1)来记录是否完全匹配。

========================================================

多读一些书,英语很重要。

More reading,and english is important.

I'm Hongten

========================================================

java中的List记录是否完全匹配方法的更多相关文章

  1. JAVA 中LinkedHashMap要点记录

    JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...

  2. (转载)java中判断字符串是否为数字的方法的几种方法

    java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  3. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  4. Java中Date和Calender类的使用方法

    查看文章     Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...

  5. JAVA中文件与Byte数组相互转换的方法

    JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...

  6. java中什么是bridge method(桥接方法)

    java中什么是bridge method(桥接方法) https://blog.csdn.net/z69183787/article/details/81115524

  7. slf4j+log4j在Java中实现日志记录

    小Alan今天来跟大家聊聊开发中既简单又常用但必不可少的一样东西,那是什么呢?那就是日志记录,日志输出,日志保存. 后面就统一用日志记录四个字来形容啦. 日志记录是项目的开发中必不可少的一个环节,特别 ...

  8. JAVA 中日志的记录于使用

    java中常用的日志框架 日志接口 Commons Logging Apache Commons Logging是一个基于Java的日志记录实用程序,是用于日志记录和其他工具包的编程模型.它通过其他一 ...

  9. JAVA中一些需要记录的知识点(进阶部分)···持续更新

    1.JAVA中的相对路径 file = new file("")与file = new file("./")方式相同,该路径为整个project的根目录(实际上 ...

随机推荐

  1. 【20140113】package 与 import

    一个完整的java源程序应该包括下列部分: package语句: //该部分至多只有一句,必须放在源程序的第一句 import语句: public classDefinition: //公共类定义部分 ...

  2. SSIS Dataflow使用存储过程不能检索列名

    在项目中遇到一个问题,需要在Dataflow中调用一个存储过程,然后把结果生成一个csv文件. 然而在dataflow调用存储过程中遇到了问题,SP不能正确的返回列名. 在SSMT里面明明是可以查出数 ...

  3. js判断当前的访问是手机还是电脑

    <script type="text/javascript"> //平台.设备和操作系统 var system ={ win : false, mac : false, ...

  4. PHP判断当前访问的是 微信、iphone、android 浏览器

    <?phpvar ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i)=="micromess ...

  5. C# 创建Windows Service

    当我们需要一个程序长期运行,但是不需要界面显示时可以考虑使用Windows Service来实现.这篇博客将简单介绍一下如何创建一个Windows Service,安装/卸载Windows Servi ...

  6. h264 profile & level

    转自:http://blog.csdn.net/sphone89/article/details/17492433 H.264 Profiles H.264有四种profile,每个profile支持 ...

  7. 【rqnoj28】[Stupid]愚蠢的宠物

    题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 描述 狗狗的家因为常常遭到猫猫的攻击,所以不 ...

  8. 序列化 Serializable

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...

  9. 【Tomcat】直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置

    在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat.在启动时,startup.b ...

  10. hive脚本出现Error: java.lang.RuntimeException: Error in configuring object和Caused by: java.lang.IndexOutOfBoundsException: Index: 9, Size: 9

    是在reduce阶段报的错误,详细错误信息是 朱传豪 19:04:48 Diagnostic Messages for this Task: Error: java.lang.RuntimeExcep ...