java中两个list集合如何排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中两个list集合如何排序相关的知识,希望对你有一定的参考价值。

有两个集合
List<Article> list1 = new ArrayList<Article>();
List<Article> list2 = new ArrayList<Article>();

里面有几个属性 ,Article.java如下:
private String title;
private String content;
private Date gxrq; ---->(java.util.Date类型)
现在需要根据 gxrq 进行排序
list1 是从一个表AT1中取出的数据,list2是从另外一个表AT2中取出的数据
请问怎样将这两个集合合成一个集合并且根据 gxrq 进行排序

请各位大侠门帮我写一下排序这个方法,谢谢了。

首先让你的Article实现Comparable这个接口..

然后根据他的gxrq进行比较..

集合合成的话
list1.addAll(list2)就行了。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class Article implements Comparable<Article>

public static void main(String[] args)
List<Article> list1 = new ArrayList<Article>();
List<Article> list2 = new ArrayList<Article>();
Article a1 = new Article();
a1.setGxrq(new Date(100, 5, 5));
Article a2 = new Article();
a2.setGxrq(new Date(100, 3, 5));
list1.add(a1);
list2.add(a2);
list1.addAll(list2);
Collections.sort(list1);
for(Article a : list1)
System.out.println(a.getGxrq());



private String title;

private String content;

private Date gxrq;

public int compareTo(Article arg0)
return this.gxrq.compareTo(arg0.gxrq);


public String getContent()
return content;


public void setContent(String content)
this.content = content;


public Date getGxrq()
return gxrq;


public void setGxrq(Date gxrq)
this.gxrq = gxrq;


public String getTitle()
return title;


public void setTitle(String title)
this.title = title;

参考技术A 最正统的做法是自定义一个比较器,如下所示

public class ArticleComparator implements Comparator

public int compare(Object o1, Object o2)
Article c1 = (Article) o1;
Article c2 = (Article) o2;
if (c1.getGxrq().getTime() > c2.getGxrq().getTime())
return 1;

return -1;



主代码这样既可

List<Article> list1 = new ArrayList<Article>();
/*.....添加数据.......*/
List<Article> list2 = new ArrayList<Article>();
/*.....添加数据.......*/
list1.addAll(list2);
ArticleComparator articleComparator = new ArticleComparator();
Collections.sort(list1, articleComparator);
参考技术B 将两个list合并
List<Article> list1 = new ArrayList<Article>();
List<Article> list2 = new ArrayList<Article>();
list1.addAll(list2);
Collections.sort(list,new ReverseSort());
//自定义反向排序比较器
class ReverseSort implements Comparator
public int compare(Object obj1,Object obj2)
Article user1 = (Article)obj1;
Article user2 = (Article)obj2;
return -user1.gxrq.compareTo(user2.gxrq);

参考技术C 放到一个list中排序就可以了
List<Article> list = new ArrayList<Article>();
list.addAll(list1);
list.addAll(list2);
然后2层循环就可以了
参考技术D List<String> list = new ArrayList<String>();
list.add("6");
list.add("5");
list.add("");
list.add("3");
list.add("1");
list.add("2");
list.add("4");

Collections.sort(list);

java中list集合的内容,如何使用像数据库中group by形式那样排序

java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:
有一个 List<JavaBean> 他中包含了一些如下的内容
JavaBean:
name    money
(名称)  (金额)

来源A   100
来源B   200
来源C   300
来源B   6600
来源A   99800
<数据1>

最后想实现的是:如果假设这些数据在数据库中,那么通过 select name,sum(money) from Table group by name 该语句得到的List<JavaBean>
来源A  99900
来源B  6800
来源C  300
<数据2>

简单的说就是让集合从 <数据1>的形式 变为 <数据2>的形式

请高手帮忙哦。谢谢了!


package cn.zhangao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class ListGroup { public static void main(String[] args) { List<JavaBean> list = new ArrayList<JavaBean>(); list.add(new JavaBean("来源A", 100)); list.add(new JavaBean("来源B", 200)); list.add(new JavaBean("来源C", 300)); list.add(new JavaBean("来源B", 6600)); list.add(new JavaBean("来源A", 99800)); List<JavaBean> groupList = getListByGroup(list); for (JavaBean bean : groupList) { System.out.print(bean.getGroup() + " "); System.out.println(bean.getMoney()); } } private static List<JavaBean> getListByGroup(List<JavaBean> list) { List<JavaBean> result = new ArrayList<JavaBean>(); Map<String, Integer> map = new HashMap<String, Integer>(); for (JavaBean bean : list) { if (map.containsKey(bean.getGroup())) { map.put(bean.getGroup(), map.get(bean.getGroup()) + bean.getMoney()); } else { map.put(bean.getGroup(), bean.getMoney()); } } for (Entry<String, Integer> entry : map.entrySet()) { result.add(new JavaBean(entry.getKey(), entry.getValue())); } return result; } } class JavaBean { private String group; private int money; public JavaBean() { } public JavaBean(String group, int money) { this.group = group; this.money = money; } public String getGroup() { return group; } public void setGroup(String group) { this.group = group; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } }

 

以上是关于java中两个list集合如何排序的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中List集合的汉字排序

如何在JAVA中实现两个集合的交和并

Java 中List集合中自定义排序

java中list集合的内容,如何使用像数据库中group by形式那样排序

2018.9.26 如何对List集合中的元素进行排序?

Java中如何对集合排序