今天要说的是给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. Jquery自定义扩展方法(一)

    jquery是一款流行的JS框架,自定义JS方法,封装到Jquery中,调用起来也挺方便的,怎么写Jquery扩展方法那,网上翻阅了一部分代码,其实也挺简单的: 方式一: (jQuery.fn.set ...

  2. OCJP(1Z0-851) 模拟题分析(六)over

    Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...

  3. jQuery函数attr()和prop()的区别

    在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同. 但不得不说的是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. ...

  4. Linux环境下stl库使用(map)

    例子1: testMap.cpp #include <string.h> #include <iostream> #include <map> #include & ...

  5. 1-01Sql Sever 2008的安装

    Sql Sever 2008对计算机的配置要求: 1:处理器:最低1.4Ghz的处理器,建议使用2.0GHz或更高的处理器  . 2:内存:最小512MB, 建议使用1GB或更高的处理器. 3:磁盘容 ...

  6. 第二十一篇:SOUI中的控件注册机制

    Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...

  7. 用 C# 实现一个简单的 Rest Service 供外部调用

    用 C#  实现一个简单的 Restful Service 供外部调用,大体总结为4点: The service contract (the methods it offers). How do yo ...

  8. 【rqnoj378】 约会计划

    题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间的关系及其复杂,cc必须严格 ...

  9. WebAPI身份验证

    对WebAPI接口的开放当然要做控制,需要身份验证如何做到呢. 进行身份验证后的 服务器拒绝了访问! 第一步添加一个CustomHandler.cs的类 1: using System; 2: usi ...

  10. 在caffe中添加新的layer

    比如现在要添加一个vision layer,名字叫Ly_Layer:(一般命名第一个字母大写,其余小写.) 1.属于哪个类型的layer(共五种:common_layer, data_layer, l ...