Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同类别的比较_Java_Android_Arraylist_Compare - Fatal编程技术网

Java 不同类别的比较

Java 不同类别的比较,java,android,arraylist,compare,Java,Android,Arraylist,Compare,让我给你一些代码,这样你就可以看到我在用下面的android java代码做什么了。例如,我有以下两个类,一个从另一个扩展而来: class MyClassOne { protected float x, y; MyClassOne(float x, float y) { this.x = x; this.y=y; } public void printY(){ System.out.print(y); } } cla

让我给你一些代码,这样你就可以看到我在用下面的android java代码做什么了。例如,我有以下两个类,一个从另一个扩展而来:

class MyClassOne {
    protected float x, y;
    MyClassOne(float x, float y) { 
        this.x = x; this.y=y;
    }
    public void printY(){
        System.out.print(y); 
    }
}

class MyClassTwo extends MyClassOne {
    protected String stringSpecificToThisClass;
    private long longSpecificTothisClass;
    MyClassTwo(float x, float y, String s, long l) {
        this.x=x; this.y=y; 
        this.longSpecificTothisClass= l; this.stringSpecificTothisClass=s;
    }
}
然后按照以下方式初始化这些类

private ArrayList<MyClassOne> mClassOne = new ArrayList<MyClassOne>();
private ArrayList<MyClassTwo> mClassTwo = new ArrayList<MyClassTwo>();
for(int i=0;i<5;i++){
    Random random = new Random(10);
    mClassOne.add(new MyClassOne(i*12, random.nextInt()));
    mClassTwo.add(new MyClassOne(i*11, random.nextInt()));
}
希望上面的代码足够清晰,以便其他人可以看到我正在尝试做什么;问题是:

“我如何组合两个ArrayList,然后根据它们各自的y值对它们进行排序。”

我一直在寻找的答案
ArrayList mTest=new ArrayList();
mTest.addAll(麦克拉松);
mTest.addAll(mClassTwo);
Collections.sort(mTest,newcomparator(){
@凌驾
公共整数比较(MyClassOne对象J1,MyClassII对象J2){
返回(int)(obj1.getY()-obj2.getY());}
}
);
//mTest现在已排序,由~foreach(mTest){print mTest.getY();}验证

好吧,您可以使用
比较器
,它也应该能够处理
MyClassTwo
实例,因为
MyClassTwo
扩展了
MyClassOne

只需创建一个
列表
,添加其他列表的所有元素并进行排序


如果类之间没有相互扩展,请引入一个公共接口。

也许我今天的速度很慢,但我完全无法理解您的问题。你的代码看起来相当混乱。你能用语言解释一下你想要达到的目标吗?所以作为参考:ArrayList mTest=new ArrayList();mTest.addAll(麦克拉松);mTest.addAll(mClassTwo);Collections.sort(mTest,new Comparator(){@Override public int compare(MyClassOne obj1,MyClassTwo obj2){return(int)(obj1.getY()-obj2.getY());}}});//mTest现在被~foreach(mTest){print mTest.getY();}排序,并与使用
集合相结合。在将两个列表转储到一个用
MyClassOne
参数化的列表中之后,排序
Comparator
需要访问
y
字段,不过。@G\H你说得对,我没有看到
y
没有getter@Terry,请把这个getter添加到MyClassOne中。嗯,什么都没有-还在测试:)我已经接受了你的答案。感谢您的输入&&@G_H
private Object[][] mSort(){
    Object[][] mSort = new Object[mClassOne.size()][2];
    for(int i = 0; i<mClassOne.size(); i++){
        mSort[i][0] = i;
        mSort[i][1] = mClassOne.get(i).y;
    }
    Arrays.sort(mSort, new Comparator<Object[]>(){
        @Override
        public int compare(Object[] obj1, Object[] obj2){
            Float comp1 = (Float)obj1[1]; Float comp2 = (Float) obj2[1];
            return comp1.compareTo(comp2);
        }
    });
    return mSort;
}

Object[][] mSort = mSort();
for(int i=0;i<mClassOne.size();i++){
    int z = (Integer)mSort[i][0];
    mClassOne.get(z).printY();
}
2, 4, 5, 6, 9
ArrayList<MyClassOne> mTest = new ArrayList<MyClassOne>();
mTest.addAll(mClassOne);
mTest.addAll(mClassTwo);
Collections.sort(mTest, new Comparator<MyClassOne>(){
    @Override
    public int compare(MyClassOne obj1, MyClassTwo obj2) {
        return (int) (obj1.getY() - obj2.getY()); } 
    }
);
// mTest is now sorted, verified by ~ foreach(mTest) {print mTest.getY(); }