补全一下6楼的写法,其实大致就是这个样子的. 如果是判断是否为同一个List 直接使用 == 就行了.代码如下 List list1 = new ArrayList(); list1.add("1"); List list2 = new ArrayList(); list2.add("2"); List list3 = new ArrayList(); list3.add("3"); List list4 = new ArrayList(); list4.add("3"); List list5 = new ArrayList(); list5.add("4"); List list6 = new ArrayList(); list6.add("1"); List list7 = new ArrayList(); list7.add("5");
List l2 = Arrays.asList(new String[]{"1","345","232"});
List l3 = Arrays.asList(new String[]{"1","2","345"});
List<List<T>> list = new ArrayList<List<T>>();
list.add(l1);
list.add(l2);
list.add(l3);
for(int i= 0;i<list.size();i++){
for(int j= i+1;j<list.size();j++){
Sysout(list.get(i).toString());
Sysout(list.get(j).toString());
比较两个list集,相等的放一个里
}
}
大概这意思,我就能想到循环这种这笨办法,等大神来答吧
public static <T> Map<String, List<T>> listContrast(List<T> list1, List<T> list2){
HashMap<String, List<T>> map = new HashMap<String, List<T>>();
List<T> list = new ArrayList<T>();
int i = 0;
if(list1.size() >= list2.size()){ //当list1大于list2遍历list2
for (T t : list2) { //循环list2
if(list1.contains(t)){
list.add(t); //当list1中包含list2中其中一个元素,添加到list中
i++;
}
}
}else{ //和if相同,list1和list2互换
for (T t : list1) {
if(list2.contains(t)){
list.add(t);
i++;
}
}
}
/**删除list1、2中包含list的元素**/
list2.removeAll(list);
list1.removeAll(list);
map.put("list1", list1);
map.put("list2", list2);
map.put("sameList", list);
return map;
}
补全一下6楼的写法,其实大致就是这个样子的. 如果是判断是否为同一个List 直接使用 == 就行了.代码如下
List list1 = new ArrayList();
list1.add("1");
List list2 = new ArrayList();
list2.add("2");
List list3 = new ArrayList();
list3.add("3");
List list4 = new ArrayList();
list4.add("3");
List list5 = new ArrayList();
list5.add("4");
List list6 = new ArrayList();
list6.add("1");
List list7 = new ArrayList();
list7.add("5");
//用来存放未处理的list集合
List<List<String>> oldList = new ArrayList<List<String>>();
oldList.add(0,list1);
oldList.add(1,list2);
oldList.add(2,list3);
oldList.add(3,list4);
oldList.add(4,list5);
oldList.add(5,list6);
oldList.add(6,list7);
//用来存放分组后的集合
List<List<List<String>>> newList = new ArrayList<List<List<String>>>();
//拿出未处理的list中的,每一个元素与处理后的list中的每一个分组中的第一个元素作比较
//modelList 处理过后的数据的分组
List<List<String>> modelList = new ArrayList<List<String>>();
for(int i=0; i<oldList.size(); i++){
//规定一个开关如果是true 就是有相同的list
boolean flag = false;
//相同的list所在的下标
int index = 0;
//如果是第一次则直接把list放到第一个分组中
if(0 == newList.size()){
modelList.add(oldList.get(i));
newList.add(0,modelList);
continue;
}
int a = newList.size();
for(int j=0; j<a; j++){
//如果只是比较这两个List是否指向同一个List 可以直接使用 == 去判断 oldList.get(i) == newList.get(j).get(0)
if(oldList.get(i).equals(newList.get(j).get(0))){
flag = true;
index = j;
}
}
//根据判断分组
if(flag){
newList.get(index).add(oldList.get(i));
}else{
modelList = new ArrayList<List<String>>();
modelList.add(oldList.get(i));
newList.add(a,modelList);
}
}
//输出展示每个分组的第一个以及每个分组的个数
for(int i=0; i<newList.size(); i++){
System.out.print(newList.get(i).get(0));
System.out.print(" ");
System.out.println(newList.get(i).size());
}
List<Integer> list1 = Arrays.asList(1,2,3,4,5);
List<Integer> list2 = Arrays.asList(6,2,8,4,9);
List<Integer> list3 = Arrays.asList(0,5,7,8,5);
List<Integer> list4 = Arrays.asList(1,0,6,4,2); List<Integer> finalList = Lists.newArrayListWithExpectedSize(20);
finalList.addAll(list1);
finalList.addAll(list2);
finalList.addAll(list3);
finalList.addAll(list4); Map<Integer, List<Integer>> result = finalList.stream().collect(Collectors.groupingBy(i -> i));
for (Map.Entry<Integer, List<Integer>> entry : result.entrySet()) {
System.out.println(entry.getValue());
}
}