gpt4 book ai didi

java - 对具有不同对象的数组列表进行排序

转载 作者:行者123 更新时间:2023-11-30 00:35:47 27 4
gpt4 key购买 nike

我是 stackoverflow 的新手。

这是我的问题

这是关于 Android 的。我正在实现具有异构布局的回收器 View 。我正在将静态数据传递给它。所以如果它的布局 A 它需要对象 A 数据。如果它的布局 B 它接受对象 B 数据等。

示例:

List.add(new A("May 27",2,3000$));

List.add(new B("April 21",2,"Place1",2000$));

List.add(new c("March 20","from place","toplace",5000$));

我的问题是如何根据我们为每个对象传递的日期对 Recyclerview 进行排序。假设“3 月 20 日”排在第一位,因此它必须出现在回收站 View 的顶部,而“5 月 27 日”应该在回收站 View 中最后显示。

我可以通过将列表和比较器接口(interface)的实现作为第二个参数传递来使用 Collections.sort()。通过删除日期字段并将其插入父类 D 并使类 A、B、C 继承类 D。但它在我的情况下不起作用。

Class D {

private String date;

// getter and setter method

}

Class A extends D{}

Class B extends D{}

Class C extends D{}

在 RecyclerViewAdapter 中

//onCreateViewHolder()


//OnBindViewHolder()

//getiewType()


//Creating list of data

private ArrayList<Object> getData(){

ArrayList<Object> list = new ArrayList<>();

for(int i=0;i<=20;i++) {

list.add(new A("MAY 23", 1, 3000$));

list.add(new B("April27", 1, 2, 3400$));

list.add(new C("New york" "March 28", 1000$, 2, 2));

}


Collections.sort(list, new Comparator<D>() {

@Override
public int compare(D l1, D l2) {

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd", Locale.ENGLISH);

Date d1=null;
Date d2= null;

try {
d1=sdf.parse(String.valueOf(l1.getDate()));

d2= sdf.parse(String.valueOf(l2.getDate()));

} catch (ParseException e) {

e.printStackTrace();
}

if(d1 != null && d1.after(d2)){

return -1;

}else{

return 1;}
}

return 0;

##error "unexpected token"///或者如果在这里做某事它显示整个 block ##as error :

第二个参数错误

找到:java.util.comparator(D)

需要:java.util.comparator(Object)

    });

return list;

有人可以帮我解决这个问题吗?提前致谢

最佳答案

如果您通过了正确的比较器,您应该会得到想要的输出。它应该看起来像这样:

Collections.sort(list, new Comparator<ListType>() {
@Override
public int compare(ListType l1, ListType l2) {
return l1.getDate().compareTo(l2.getDate());
}
});

如果不起作用,请检查您是否正确设置了日期。我看到您在这里将日期作为字符串传递。您在将其设置为日期时是否正确解析了它?


编辑

您没有正确解析日期。解析这些日期

May 27
April 21
March 20

你应该使用:

...
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd", Locale.ENGLISH);
...

关于java - 对具有不同对象的数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com