java中map复杂数组转list(二维集合的遍历和merge排序)

[size=small][b]1.前言。[/b][/size]
如题。有两种做法,做法2比做法1要好。
[size=small]2.做法[/size]
(1)将数组变为Collection

Map<byte[], List<Test>> results = null;//定义一个集合的集合
Collection<List<Test>> collection = results.values();


(2)将集合转化为数组,这样每个数组就是一个集合了。
[quote]
Object[] list2 = collection.toArray();

[/quote]
(3)遍历集合的集合

long total=0;//集合数据总数
for (int i = 0; i < list2.length; i++) {
List<Test> object = (List<Test>) list2[i];
total = total + object.size();
}


[size=small][b]3.做法2。[/b][/size]
做法1中的步骤2其实可以优化,我们直接将list进行merge,再排序.例子如下:
(1)Test类

package com.ljn.entity;
public class Test {
private long id;

public Test(long id) {
this.id = id;
}

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

}



(2)自定义排序类,这个

package com.ljn.entity;

import java.util.Comparator;

/**
* 对Step类进行排序
*
* @author Administrator
*
*/
public class MyComparator implements Comparator<Test> {

/**
* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
*/
@Override
public int compare(Test t1, Test t2) {
long id1 = t1.getId();
long id2 = t2.getId();
if (id1 > id2) {
return 1;
} else if (id1 == id2) {
return 0;
} else {
return -1;
}
}
}


(3)对List进行merge和排序,这样基本是最快了,如果还有更快的,请留言。


import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.ljn.entity.MyComparator;
import com.ljn.entity.Test;

public class CollectionTest {
public static void main(String[] args) {
// Collection<List> collection=Collections.a;
List List1 = new ArrayList();
List List2 = new ArrayList();
List1.add(new Test(1));
List1.add(new Test(2));
List1.add(new Test(3));
List1.add(new Test(4));

List2.add(new Test(5));
List2.add(new Test(5));
List2.add(new Test(6));
List2.add(new Test(7));
List2.add(new Test(8));

Map<byte[], List<Test>> results = new HashMap();
results.put("1".getBytes(), List1);
results.put("2".getBytes(), List2);

Collection<List<Test>> collection = results.values();

List list = new ArrayList();
Iterator it=results.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
List<Test> li=(List<Test>)entry.getValue();
list.addAll(li);
}
//list.addAll(collection);
for (int i = 0; i < list.size(); i++) {
System.out.println(((Test)list.get(i)).getId());
}
Collections.sort(list, new MyComparator());
for (int i = 0; i < list.size(); i++) {
System.out.println(((Test)list.get(i)).getId());
}

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值