今天要说的是给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. SVN的忽略和只读使用方法学习记录

    前言,先扯几句.最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统.Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手.我赞同分布式版本管理控制,它有诸多 ...

  2. Datagard產生gap

    本文轉載自無雙的小寶的博客:http://www.cnblogs.com/sopost/archive/2010/09/11/2190085.html 有時候因為網路或備份故障等原因,主機所產生的歸檔 ...

  3. 【leetcode】plus One

    问题描述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...

  4. 信号量互斥,王明学learn

    信号量互斥 信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥).进程可以根据它判定是否能够访问某些共享资源.除了用于访问控制外,还可用于进程同步. 一.信号量分类 ...

  5. matlab练习程序(简单多边形的核)

    还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...

  6. 关于SQLSERVER联合查询一点看法

    首先看一段代码 这个数据库表我就不发了,这段代码的意思是:查询Book表中大于该类图书价格平均值的图书信息, 先看()里的内容,我一个表起了两个别名,让这个表的相同的id相等,查出平均分,然后再看() ...

  7. hash 分区的用途是什么?

    Hash partitioning enables easy partitioning of data that does not lend itself to rangeor list partit ...

  8. Android Studio在导入eclipse的项目时一直卡在gradle:Configure project

    学Java的时候用的是eclipse,写android代码的时候用了疯狂android讲义推荐的AS.在用AS的时候出了很多问题,比如我想从别人那里拷贝eclipse写的工程的时候就遇到了Gradle ...

  9. Android优化

    ListView的优化 复用convertview , 历史的view对象 减少子孩子查询的次数 viewholder 异步加载数据(把图片缓存) 条目多时分页加载数据 加载时显示进度条让用户等待 I ...

  10. JDK AIO编程

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供两种方式获取获取操作结果. 通过java.util.concurrent.Future类来表示异步操作的结 ...