先实现一个Comparator去排序一下,然后再慢慢处理吧
另外,
1   10
这应该是一个类的两个成员吧

解决方案 »

  1.   


    public static void main(String[] args) {
    // 1   10
    // 1   20
    // 2   10
    // 3   57
    // 1   2
    // 3   24
    List strList = new ArrayList();

    List one = new ArrayList();
    List two = new ArrayList();
    List three = new ArrayList();

    strList.add(new int[]{1, 10});
    strList.add(new int[]{1, 20});
    strList.add(new int[]{2, 10});
    strList.add(new int[]{3, 57});
    strList.add(new int[]{1, 2});
    strList.add(new int[]{3, 24});

    for(int i=0;i<strList.size();i++){
    int[] temp = (int[]) strList.get(i);
    if(temp[0]==1){
    one.add(temp[1]);
    }else if(temp[0]==2){
    two.add(temp[1]);
    }else if(temp[0]==3){
    three.add(temp[1]);
    }
    }
    System.out.println("1: "+one.get(0)+","+one.get(1)+","+one.get(2));
    System.out.println("2: "+two.get(0));
    System.out.println("3: "+three.get(0)+","+three.get(1));
    }
    想到就写了,也许有更简单的算法。最后打印只是做个样子,自己看着办吧
      

  2.   


    List 里面的元素不是固定的,是从数据库里面读取的
    准确说List 有如下2列
    A  B当A里面的值相同的时候,B的值就合计,以逗号隔开
      

  3.   

    Map<A,List<B>>
    如何
      

  4.   


    public static void main(String[] args) {
    List list = new ArrayList();
    Userinfo uinfo = new Userinfo("1", "10");
    Userinfo uinfo1 = new Userinfo("1", "20");
    Userinfo uinfo2 = new Userinfo("2", "30");
    Userinfo uinfo3 = new Userinfo("3", "340");
    Userinfo uinfo4 = new Userinfo("1", "50");
    list.add(uinfo);
    list.add(uinfo1);
    list.add(uinfo2);
    list.add(uinfo3);
    list.add(uinfo4); List listb = list;
    String age = "";
    for (int i = 0; i < list.size(); i++) {
    Userinfo user = (Userinfo) list.get(i);
    for (int j = i; j < listb.size(); j++) {
    Userinfo info = (Userinfo) listb.get(j);
    if (user.getUserid().equals(info.getUserid())) {
    age = age + info.getAge() + ",";
    }
    }
    System.out.println(user.getUserid() + "_" + age);
    age = "";
    listb.remove(i);

    }
    }
    结果如下:
    1_10,20,50,
    2_30,
    1_50,第三条记录错了,应该是3_340
      

  5.   

    从数据库读取?那直接group by一下不就行了?一定要自己写JAVA处理么?
      

  6.   

    直接读取的List以列表形式显示
    合计的list有其他的用处
      

  7.   

    List 里面的元素不是固定的,是从数据库里面读取的
    准确说List 有如下2列
    A  B当A里面的值相同的时候,B的值就合计,以逗号隔开我的不是就能用?关键你数据库出来的是什么样子?
      

  8.   


    //A,List<B>
    Map<Integer, List<Integer>> total = new HashMap<Integer, List<Integer>>();
    //rs is your resultset
    while (rs) {
    if (total.containsKey(rs.getInt(1))) {
    total.get(rs.getInt(1)).add(rs.getInt(2))
    }
    else {
    List<Integer> list = new ArrayList<Integer>();
    list.add(rs.getInt(2));
    total.put(rs.getInt(1), list);
    }
    }不知道满足你的要求不
      

  9.   

    改了一下,意思对了吗?
    package str;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;public class Calculator { /**
     * @param args
     */
    public static void main(String[] args) {
    // 1   10
    // 1   20
    // 2   10
    // 3   57
    // 1   2
    // 3   24
    List strList = new ArrayList();

    Map dataMap = new HashMap();


    strList.add(new String[]{"1", "10"});
    strList.add(new String[]{"1", "20"});
    strList.add(new String[]{"2", "10"});
    strList.add(new String[]{"3", "57"});
    strList.add(new String[]{"1", "2"});
    strList.add(new String[]{"3", "24"});

    for(int i=0;i<strList.size();i++){
    String[] temp = (String[]) strList.get(i);
    String value = getMapValue(dataMap, temp);
    dataMap.put(temp[0], value);
    }

    String one = (String) dataMap.get("1");
    String two = (String) dataMap.get("2");
    String three = (String) dataMap.get("3");
    System.out.println("1: "+one);
    System.out.println("2: "+two);
    System.out.println("3: "+three);
    } private static String getMapValue(Map dataMap, String[] temp) {
    String mapValue = (String)dataMap.get(temp[0]);
    String returnValue = temp[1];
    if(mapValue!=null){
    returnValue=mapValue+","+temp[1];
    }
    return returnValue;
    }
    }
      

  10.   

    public static Map<Integer,List<Integer>> statisticList1(List<Entry> list){
    Map<Integer,List<Integer>> map = new HashMap<Integer,List<Integer>>();
    for(int i=0;i<list.size();i++){
    Entry tempEntry = list.get(i);
    Integer member1 = Integer.valueOf(tempEntry.getMember1());
    Integer member2 = Integer.valueOf(tempEntry.getMember2());
    List<Integer> value = map.get(member1);
    if(value != null){
    value.add(member2);
    }else{
    value = new ArrayList<Integer>();
    value.add(member2);
    map.put(member1, value);
    }
    }
    return map;
    }
    class Entry{
    private int member1;
    private int member2;
    public Entry(int member1,int member2){
    this.member1 = member1;
    this.member2 = member2;
    }
    public int getMember1() {
    return member1;
    }
    public void setMember1(int member1) {
    this.member1 = member1;
    }
    public int getMember2() {
    return member2;
    }
    public void setMember2(int member2) {
    this.member2 = member2;
    }

    }
      

  11.   

    List 中A的值不是固定的,你现在是写死了为1,2,3
    假如从数据库读取的值为1到10000,
    按照你的写法,需要些多少dataMap.get()strList.add(new String[] { "33", "24" });
    strList.add(new String[] { "352", "24" });假如2行值,输入结果还是
    1: 10,20,2
    2: 10
    3: 57,24
      

  12.   

    假如2行值,输入结果还是
    1: 10,20,2
    2: 10
    3: 57,24哦,你理解错我意思
    都已经进map了,还在乎输出吗?
    package str;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Calculator { /**
     * @param args
     */
    public static void main(String[] args) {
    // 1   10
    // 1   20
    // 2   10
    // 3   57
    // 1   2
    // 3   24
    List strList = new ArrayList();

    Map dataMap = new HashMap();


    strList.add(new String[]{"1", "10"});
    strList.add(new String[]{"1", "20"});
    strList.add(new String[]{"2", "10"});
    strList.add(new String[]{"3", "57"});
    strList.add(new String[]{"1", "2"});
    strList.add(new String[]{"3", "24"});
    strList.add(new String[] { "33", "24" });
    strList.add(new String[] { "352", "24" });

    for(int i=0;i<strList.size();i++){
    String[] temp = (String[]) strList.get(i);
    String value = getMapValue(dataMap, temp);
    dataMap.put(temp[0], value);
    }

    Set key = dataMap.keySet();
    Iterator it = key.iterator();
    while(it.hasNext()){
    String keyStr = (String) it.next();
    String value = (String) dataMap.get(keyStr);
    System.out.println(keyStr+": "+value);
    }
    } private static String getMapValue(Map dataMap, String[] temp) {
    String mapValue = (String)dataMap.get(temp[0]);
    String returnValue = temp[1];
    if(mapValue!=null){
    returnValue=mapValue+","+temp[1];
    }
    return returnValue;
    }
    }
      

  13.   

    在数据库里做一下order by。
    然后遍历一遍结果集,把第一列相同的记录做成一个数组就行了。
    至于遍历的算法,应该就很简单了吧,把前一个的第一列和后一个的第一列比,不一样则新生成一个数组。一样则add。
      

  14.   

    你如果要把前面的1,2,3排序,直接换成TreeMap就可以了,如果要其他排法,自己实现个compaire接口。
      

  15.   


    方法确实可行,谢谢了,要不帮我看看我这代码的问题在那
    public static void main(String[] args) {
    List list = new ArrayList();
    Userinfo uinfo = new Userinfo("1", "10");
    Userinfo uinfo1 = new Userinfo("1", "20");
    Userinfo uinfo2 = new Userinfo("2", "30");
    Userinfo uinfo3 = new Userinfo("3", "340");
    Userinfo uinfo4 = new Userinfo("1", "50");
    list.add(uinfo);
    list.add(uinfo1);
    list.add(uinfo2);
    list.add(uinfo3);
    list.add(uinfo4); List listb = list;
    String age = "";
    for (int i = 0; i < list.size(); i++) {
    Userinfo user = (Userinfo) list.get(i);
    for (int j = i; j < listb.size(); j++) {
    Userinfo info = (Userinfo) listb.get(j);
    if (user.getUserid().equals(info.getUserid())) {
    age = age + info.getAge() + ",";
    }
    }
    System.out.println(user.getUserid() + "_" + age);
    list.remove(i);
    age = "";
    }
    }输出结果为
    1_10,20,50,
    2_30,
    1_50,明显错了,这里该怎么改啊?
      

  16.   

    list大小在变,但是你删除的list不时所有引用过的。
      

  17.   

    List<int[]> strList = new ArrayList<int[]>();
    strList.add(new int[]{1, 10});
            strList.add(new int[]{1, 20});
            strList.add(new int[]{2, 10});
            strList.add(new int[]{3, 57});
            strList.add(new int[]{1, 2});
            strList.add(new int[]{3, 24});
            Map<Integer,List<Integer>> map = new HashMap<Integer, List<Integer>>();
            for(int[] e: strList){
             if(! map.containsKey(e[0])){
             map.put(e[0], new ArrayList<Integer>());
             }
             map.get(e[0]).add(e[1]);
            }
            
            for(Map.Entry<Integer, List<Integer>> entry : map.entrySet()){
             System.out.println(entry.getKey()+" " + entry.getValue());
            }
      

  18.   

    算,你的算法真的很悲剧。这是我帮你改良的。package str;import java.util.ArrayList;
    import java.util.List;public class OtherOrder { public static void main(String[] args) {
    List list = new ArrayList();
    String[] uinfo = new String[] { "1", "10" };
    String[] uinfo1 = new String[] { "1", "20" };
    String[] uinfo2 = new String[] { "2", "30" };
    String[] uinfo3 = new String[] { "3", "340" };
    String[] uinfo4 = new String[] { "1", "50" };
    list.add(uinfo);
    list.add(uinfo1);
    list.add(uinfo2);
    list.add(uinfo3);
    list.add(uinfo4); List listb = new ArrayList();
    listb.add(uinfo);
    listb.add(uinfo1);
    listb.add(uinfo2);
    listb.add(uinfo3);
    listb.add(uinfo4); String age = "";
    int currentP = 0;
    while (list.size() > 0) {
    String[] user = (String[]) list.get(0);
    for (int j = 0; j < listb.size(); j++) {
    String[] info = (String[]) listb.get(j);
    if (user[0].equals(info[0])) {
    age = age + info[1] + ",";
    listb.remove(j);
    list.remove(j);
    }
    }
    System.out.println(user[0] + "_" + age);
    age = "";
    }
    }
    }
    问题出在几个地方
    1、List listb = list;
    这算什么?listb成为了list的一个引用。你在remove的时候2个是一起remove,这造成了for循环的结束条件一直在变。这种写法非常不可取。直接导致你的get(index)方法中index一直在变。
    2、举个例子1_10,20,50, 你remove了里面的10,却没有办法remove其中的20和50,再下次循环时,依然要检查20和50的值,这影响效率。
    3、痘号的拼接算法,永远后面会有个多余符号
    其他没了,最严重的问题就是下标移动。在我修改你的算法中有一句。
    String[] user = (String[]) list.get(0);
    请仔细理解为什么循环都永远取0而不用递增了。
      

  19.   

    我把listb新建了一个List这是为了满足你算法中需要对2个list做比较,这应该是你思路的初衷。不能直接使用
    List listb = list;而应该用clone()但是即使clone()了,也不能复制出list里的对象,还是需要循环,效率更低,这部分,自己查资料。
    listb.remove(j);
    list.remove(j);
    这2句是为了能够使2个list同步,保持index的一致性。把符合条件的数据直接删除,防止外层循环再次检查已经保留数据。