for(int i=0;i<num;i++){
String bedate=DoDate.firstDay(-i);
String endate=DoDate.lastDay(-i);
List list=renJunKLDao.getKanLouGeRen(bedate, endate);
}
num是不定的大小,list.size()也是不定的长度
list的值的格式为[[张三,20],[李四,15],[王五,12],[赵六,8],[java,7],[lucy,4],[jack,10],[小麦,23]]
                [[张三,18],[王五,17],[赵六,12],[李四,8],[小明,7],[lucy,4],[jack,10],[小麦,23],[乔峰,26]]
                ...........
要求得到的结果是将其合并为一个list,并根据第一个list里面的第一个数字排序:
[[小麦,23,23],[张三,20,18],[李四,15,8],[王五,12,17],[jack,10,10],[赵六,8,12],[java,7,0],[lucy,4,4],[乔峰,0,26],[小明,0,7]]
要求得到的结果是将其合并为一个list,并根据第一个list里面的第一个数字排序:
[[小麦,23,23],[张三,20,18],[李四,15,8],[王五,12,17],[jack,10,10],[赵六,8,12],[java,7,0],[lucy,4,4],[乔峰,0,26],[小明,0,7]]

解决方案 »

  1.   

    list中的元素实现下Comparable接口
    排序后归并再排序就行了
      

  2.   

    能帮写下吗?不会写啊,我用map写了下没有出来
      

  3.   

    先写个Map<String,TreeSet<Integer> TreeSet会自动升序,然后再new 一个list,再向list中添加list2,遍历map 先将key放入list2然后再倒序取key对应的TreeSet中的值,加入list2.
      

  4.   

    package com.hit.edu.monkey;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeSet;public class Sort { private Map<String, TreeSet<Integer>> result = new HashMap<String, TreeSet<Integer>>(); // 存放结果

    /**
     * @param list的值的格式为[[张三,20],[李四,15],[王五,12],[赵六,8],[java,7],[lucy,4],[jack,10],[小麦,23]]
         *         [[张三,18],[王五,17],[赵六,12],[李四,8],[小明,7],[lucy,4],[jack,10],[小麦,23],[乔峰,26]]
     */
    public Map<String, TreeSet<Integer>> sort(List<Map<String, Integer>> data) {
    for(Map<String, Integer> temp : data) {
    Set<String> keys = temp.keySet();
    for( String key : keys ) {
    if( result.containsKey(key) ) {
    // 此时已经出现过这个人的名字
    result.get(key).add(temp.get(key));
    } else {
    TreeSet<Integer> list = new TreeSet<Integer>();
    list.add(temp.get(key));
    result.put(key, list);
    }
    }
    }
    return result;
    }

    public static void main(String[] args) {
    // test
    Sort sort = new Sort();
    List<Map<String, Integer>> input = new ArrayList<Map<String,Integer>>();
    Map<String, Integer> nameAge = new HashMap<String, Integer>();
    nameAge.put("张三", 20);
    nameAge.put("李四", 15);
    nameAge.put("王五", 12);
    nameAge.put("赵六", 8);
    nameAge.put("java", 7);
    nameAge.put("lucy", 4);
    nameAge.put("jack", 10);
    nameAge.put("小麦", 23);
    Map<String, Integer> nameAge1 = new HashMap<String, Integer>();
    nameAge1.put("张三", 18);
    nameAge1.put("王五", 17);
    nameAge1.put("赵六", 12);
    nameAge1.put("李四", 8);
    nameAge1.put("小明", 7);
    nameAge1.put("lucy", 4);
    nameAge1.put("jack", 10);
    nameAge1.put("小麦", 23);
    nameAge1.put("乔峰", 26);
    input.add(nameAge);
    input.add(nameAge1);

    Map<String, TreeSet<Integer>> result = sort.sort(input);
    for( String key : result.keySet() ) {
    System.out.print(key + ",");
    for( Integer temp : result.get(key) ) {
    System.out.print(temp.intValue() + ",");
    }
    System.out.println("\n");
    }
    }
    }
    运行结果: 张三,18,20,java,7,lucy,4,李四,8,15,jack,10,小明,7,小麦,23,王五,12,17,乔峰,26,赵六,8,12,这个程序没有排序,相信写到这里你的排序也能搞定~ 希望帮到你
      

  5.   

    将楼上的结果对Map<String, TreeSet<Integer>>中的TreeSet的最大值排序 就是楼主想要的结果 
      

  6.   

    可以定义一个实现Comparator的类 实现compare方法 这样Collections.sort(List<T> list,Comparator<? super T> c) 实现排序了
      

  7.   

    [[小麦,23,23],[张三,20,18],[李四,15,8],[王五,12,17],[jack,10,10],[赵六,8,12],[java,7,0],[lucy,4,4],[乔峰,0,26],[小明,0,7]]
    跟我要的结果还是不同啊,弄了一下还是不行[小麦,23,23]2 个23都要显示,如何第一个没有则用0补上如:[小明,0,7]
      

  8.   


    我不知道你是怎么弄的~~ 都已经写成这样了还弄不成你想要的~ 我帮你弄弄~
    package com.hit.edu.monkey;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Sort { private Map<String, List<Integer>> result = new HashMap<String, List<Integer>>(); // 存放结果

    /**
     * @param list的值的格式为[[张三,20],[李四,15],[王五,12],[赵六,8],[java,7],[lucy,4],[jack,10],[小麦,23]]
         *         [[张三,18],[王五,17],[赵六,12],[李四,8],[小明,7],[lucy,4],[jack,10],[小麦,23],[乔峰,26]]
     */
    public Map<String, List<Integer>> sort(List<Map<String, Integer>> data) {
    for(Map<String, Integer> temp : data) {
    Set<String> keys = temp.keySet();
    for( String key : keys ) {
    if( result.containsKey(key) ) {
    // 此时已经出现过这个人的名字
    result.get(key).add(temp.get(key));
    } else {
    List<Integer> list = new ArrayList<Integer>();
    list.add(temp.get(key));
    result.put(key, list);
    }
    }
    }
    return result;
    }

    public static void main(String[] args) {
    // test
    Sort sort = new Sort();
    List<Map<String, Integer>> input = new ArrayList<Map<String,Integer>>();
    Map<String, Integer> nameAge = new HashMap<String, Integer>();
    nameAge.put("张三", 20);
    nameAge.put("李四", 15);
    nameAge.put("王五", 12);
    nameAge.put("赵六", 8);
    nameAge.put("java", 7);
    nameAge.put("lucy", 4);
    nameAge.put("jack", 10);
    nameAge.put("小麦", 23);
    Map<String, Integer> nameAge1 = new HashMap<String, Integer>();
    nameAge1.put("张三", 18);
    nameAge1.put("王五", 17);
    nameAge1.put("赵六", 12);
    nameAge1.put("李四", 8);
    nameAge1.put("小明", 7);
    nameAge1.put("lucy", 4);
    nameAge1.put("jack", 10);
    nameAge1.put("小麦", 23);
    nameAge1.put("乔峰", 26);
    input.add(nameAge);
    input.add(nameAge1);

    Map<String, List<Integer>> result = sort.sort(input);
    for( String key : result.keySet() ) {
    System.out.print(key + ",");
    for( Integer temp : result.get(key) ) {
    System.out.print(temp.intValue() + ",");
    if( result.get(key).size() == 1 ) {
    System.out.print("0,");
    }
    }
    System.out.println("\n");
    }
    }
    }
    运行结果:
    张三,20,18,java,7,0,lucy,4,4,李四,15,8,jack,10,10,小明,7,0,小麦,23,23,王五,12,17,乔峰,26,0,赵六,8,12,
      

  9.   

    你可以做一个类,比如<Test>类
    类里面是名字和一个List,这个List用于存放出现的数值你再做一个List<Test> l;
    然后对于每一个出现的数据,按照名字进行查找,然后将出现的数值存入该Test类中List中
    这样的方法是不是很好呢
      

  10.   

    hashmap用得太少了,弄不是很明白,最后还是自己解决了,虽然办法不怎么好。要多学习楼上各位的方法才行List list0=new ArrayList();
    List list2=new ArrayList();
    for(int i=0;i<num;i++){
    String bedate=DoDate.firstDay(-i);
    String endate=DoDate.lastDay(-i);
    List list=renJunKLDao.getKanLouGeRen(bedate, endate);
    if(i==0){
    list0=list;
    }else {
    for (int j = 0; j < list0.size(); j++) {
    Object[] objects=(Object[]) list0.get(j);
    for (int k = 0; k < list.size(); k++) {
    Object[] objects2=(Object[]) list.get(k);
    if(objects[0].equals(objects2[0])){
    Object[] objectsa=new Object[num+1];
    for (int l = 0; l < objects.length; l++) {
    objectsa[l]=objects[l];
    }
    objectsa[num]=objects2[1];
    list2.add(objectsa);
    break;
    }
    if(list.size()-1==k && !(objects[0].equals(objects2[0]))){
    Object[] objectsa=new Object[num+1];
    for (int l = 0; l < objects.length; l++) {
    objectsa[l]=objects[l];
    }
    objectsa[num]=0;
    list2.add(objectsa);
    break;
    }
    }
    }
    }
    }
    return list2;
      

  11.   


    其实用数组 就可以 直接进行排序了:   数组.sort(排序方法)
      

  12.   


    /**
     * @author troy(J2EE)
     * @version 1.0
     */
    import java.util.*;
    public class Test{
        @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception{
    String[] ayy={"张三,80","李四,95","王五,72","赵六,8","java,7","lucy,4","jack,10","小麦,23"};
    Arrays.sort(ayy,new howToSort());
    for (int i=0;i<ayy.length ;i++ ){
    System.out.println(ayy[i]);
    }
        }
    }
    //按逗号分隔,取第一个字符倒序
    class howToSort implements Comparator {
      public final int compare(Object firstObj, Object secondObj){
      String tmpFirstObj=(String)firstObj;
      String tmpSecondObj=(String)secondObj;
      return tmpSecondObj.split(",")[1].substring(0,1).hashCode() - tmpFirstObj.split(",")[1].substring(0,1).hashCode();
      }
    }
    在JDK1.5 中的输出结果:---------- java1.5 -- 运行 ----------
    李四,95
    张三,80
    赵六,8
    王五,72
    java,7
    lucy,4
    小麦,23
    jack,10输出完毕 (耗时 0 秒) - 正常终止
      

  13.   

    我感觉你 用treeset先将 有所有名字不重复的 取出来 就像五楼说书的 然后 根据key值查询 两个list
      

  14.   

    先写个Map<String,TreeSet<Integer> TreeSet会自动升序,然后再new 一个list,再向list中添加list2,遍历map 先将key放入list2然后再倒序取key对应的TreeSet中的值,加入list2.把一里面的额东西打印相互来  然后放到一个里面啊