在java中按索引对arraylist的arraylist进行排序

在java中按索引对arraylist的arraylist进行排序,java,android,arraylist,Java,Android,Arraylist,我有一个arraylist of arraylist,每个内部arraylist包含2个值,第一个是整数,第二个是字符串,所以本质上它看起来像:{5,一些文本},{12,一些更多的文本},{3,甚至更多的文本}等等,我想做的是把它按从最大整数到最小整数的降序排序,因此,前面的示例看起来像:{12,更多的文本},{5,更多的文本},{3,甚至更多的文本},任何帮助都会大有帮助,提前感谢如果您的内部列表可以包含一个具有两个属性的对象会更好。此对象可用于排序 如果您的内部列表可以包含一个具有两个属性的

我有一个arraylist of arraylist,每个内部arraylist包含2个值,第一个是整数,第二个是字符串,所以本质上它看起来像:{5,一些文本},{12,一些更多的文本},{3,甚至更多的文本}等等,我想做的是把它按从最大整数到最小整数的降序排序,因此,前面的示例看起来像:{12,更多的文本},{5,更多的文本},{3,甚至更多的文本},任何帮助都会大有帮助,提前感谢

如果您的内部列表可以包含一个具有两个属性的对象会更好。此对象可用于排序

如果您的内部列表可以包含一个具有两个属性的对象,则效果会更好。此对象可用于排序

您的数据结构听起来像是一张“地图”。 也许您应该研究数据结构,尤其是集合接口和类

如果您仍然认为您拥有的是一个“列表”,那么您应该使用正确类型的Comparator或Comparable进行Collections.sort操作

如果列表是正确的,下面是数据结构的解决方案

import java.util.ArrayList;
import java.util.Collections;

public class InnerObject implements Comparable<InnerObject> {
    Integer index;
    String  name;

    public InnerObject(Integer index, String name) {
        this.index = index;
        this.name = name;
    }

    @Override
    public int compareTo(InnerObject other) {
        return index.compareTo(other.index);
    }

    @Override
    public String toString() {
        return "{" + index + "," + name + "}";
    }

    public static void main(String[] args) {
        ArrayList<InnerObject> list = new ArrayList<InnerObject>();
        list.add(new InnerObject(666, "devil"));
        list.add(new InnerObject(1, "one"));
        list.add(new InnerObject(10, "ten"));

        System.out.println("list before order: " + list);

        Collections.sort(list);

        System.out.println("list after order: " + list);

    }   
}
import java.util.ArrayList;
导入java.util.Collections;
公共类InnerObject实现了可比较的{
整数指数;
字符串名;
公共InnerObject(整数索引、字符串名称){
这个指数=指数;
this.name=名称;
}
@凌驾
公共整数比较对象(内部对象其他){
返回索引。比较(其他索引);
}
@凌驾
公共字符串toString(){
返回“{index+”,“+name+”}”;
}
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
添加(新的内部对象(666,“魔鬼”);
添加(新的内部对象(1,“一”);
添加(新的内部对象(10,“十”);
System.out.println(“订单前列表:+列表”);
集合。排序(列表);
System.out.println(“订单后面的列表:+列表”);
}   
}

您的数据结构听起来像是一张“地图”。 也许您应该研究数据结构,尤其是集合接口和类

如果您仍然认为您拥有的是一个“列表”,那么您应该使用正确类型的Comparator或Comparable进行Collections.sort操作

如果列表是正确的,下面是数据结构的解决方案

import java.util.ArrayList;
import java.util.Collections;

public class InnerObject implements Comparable<InnerObject> {
    Integer index;
    String  name;

    public InnerObject(Integer index, String name) {
        this.index = index;
        this.name = name;
    }

    @Override
    public int compareTo(InnerObject other) {
        return index.compareTo(other.index);
    }

    @Override
    public String toString() {
        return "{" + index + "," + name + "}";
    }

    public static void main(String[] args) {
        ArrayList<InnerObject> list = new ArrayList<InnerObject>();
        list.add(new InnerObject(666, "devil"));
        list.add(new InnerObject(1, "one"));
        list.add(new InnerObject(10, "ten"));

        System.out.println("list before order: " + list);

        Collections.sort(list);

        System.out.println("list after order: " + list);

    }   
}
import java.util.ArrayList;
导入java.util.Collections;
公共类InnerObject实现了可比较的{
整数指数;
字符串名;
公共InnerObject(整数索引、字符串名称){
这个指数=指数;
this.name=名称;
}
@凌驾
公共整数比较对象(内部对象其他){
返回索引。比较(其他索引);
}
@凌驾
公共字符串toString(){
返回“{index+”,“+name+”}”;
}
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
添加(新的内部对象(666,“魔鬼”);
添加(新的内部对象(1,“一”);
添加(新的内部对象(10,“十”);
System.out.println(“订单前列表:+列表”);
集合。排序(列表);
System.out.println(“订单后面的列表:+列表”);
}   
}


为什么这些内部的东西
ArrayList
s不是一个单独的类?我之所以这样做是因为这些项目是动态添加的,它们都是一个更大的程序的一部分。
ArrayList
这里是笨拙的、弱类型的,使用一个新类将使排序部分变得非常简单。有什么更好的方法可以做到这一点?使用一个新类,然后使该类基于整数键实现
可比较的
。为什么这些内部内容
ArrayList
s,而不是单独的类?我这样做是因为项目被动态添加到tbh中,它是一个更大的程序的一部分。
ArrayList
这里是笨拙的、弱类型的,使用一个新类会使排序部分变得更容易。有什么更好的方法呢?使用一个新类,然后使该类基于整数键实现
compariable
。我完全同意这一点。它看起来更像一张地图而不是一张列表。。。看看Java的Treemap,一个按键排序的映射:这似乎正是我需要的,现在我只需要弄清楚两件事:如何反转列表,使其从最大值返回到最小值,以及如何返回第二个值?在compareTo方法中,如果您编写“return other.index.compareTo(index);”然后顺序颠倒了。。。检查空条件,不管是在比较中还是在逻辑中的某个地方……哦,不,似乎排序函数实际上没有按顺序对数字排序,它们仍然停留在与之前相同的顺序上。你确定吗?因为它应该如下所示;'-顺序前的列表:[{666,魔鬼},{1,1},{10,10}]-顺序后的列表:[{1,1},{10,10},{666,魔鬼}]'我完全同意这一点。它看起来更像一张地图而不是一张列表。。。看看Java的Treemap,一个按键排序的映射:这似乎正是我需要的,现在我只需要弄清楚两件事:如何反转列表,使其从最大值返回到最小值,以及如何返回第二个值?在compareTo方法中,如果您编写“return other.index.compareTo(index);”然后顺序颠倒了。。。检查空条件,不管是在比较中还是在逻辑中的某个地方……哦,不,似乎排序函数实际上没有按顺序对数字排序,它们仍然停留在与之前相同的顺序上。你确定吗?因为它应该如下所示;'-顺序前的列表:[{666,魔鬼},{1,一},{10,十}]-顺序后的列表:[{1,一},{10,十},{666,魔鬼}]