这是一个菜鸟问题,抱歉,但我完全糊涂了。
我创建了一个名为CalendarItems
的课程。
字段是:
int index
String description
String textdate
int daysaway
构造函数使用前三个字段。目前我已经在课堂上创建了四个对象。
我现在想做两件事:
但我想了解如何通过循环实现这一目标。如果我在javascript中我有一个多维数组并且可以很容易地创建一个循环来循环它,但在可怕的java新世界中我迷失了
CalendarItems
字段上对daysaway
进行排序
我想这样做,以便我可以按照最快的顺序将它们显示为CardViews。 [充气CardViews
已经证明幸福直截了当,我可以(再次,通过手动'循环)为每个CalendarItem
充气卡并添加各个字段它。创建类和字段以及添加我的4个示例对象也起作用,所以它没有完全失去周末。]
我认为我出错的地方在于我从javascript和Excel VBA的经验中继续思考多维数组,不过我读到的关于java中的对象和迭代器接口以及arraylists,我的脑子只是拒绝接受它。
我有很多关于此问题的Google,但是对于迭代器而言,每一个简单的指南都是如此。让我比起初时更加困惑。
提前感谢任何有耐心帮助我的人。
答案 0 :(得分:1)
对于(1),你试过了什么?如果你需要一个多维数组,没有什么能阻止你使用它。考虑一下:
int dim1 = 5;
int dim2 = 10; // whatever you need
CalendarItem[][] items = new CalendarItem[dim1][dim2];
在这种情况下,您将以与JavaScript相同的方式迭代数组。
for (int i = 0; i < dim1; i++) {
for (int j = 0; j < dim2; j++) {
// do whatever you need to do
}
}
如果您实际上不需要数字索引,也可以阅读增强的for循环。
对于(2),请查看javadocs中的Comparator接口以及Collections类中的方法,特别是排序方法。
答案 1 :(得分:1)
For 1) you can either create array in java or you can use ArrayList and store your objects in that arraylist and iterate over arraylist.
ArrayList<CalendarItem> list = new ArrayList();
list.add(obj1); // obj1 is the instance you created for the calendar item.
for(CalendarItem c: list){
// this is loop , do whatever you want here
}
For sorting, Either write a comparator class or implement comparable interface to your CalenderItem and override method compareTo. In this method you can provide comparison logic based on requirede field.
答案 2 :(得分:1)
我发布我的解决方案,正如我已经写过的那样,它应该是一个完整的解决方案:
public class CalendarItem implements Comparable<CalendarItem> {
private int index;
private String description;
private ZonedDateTime textdate;
private long daysAway = 0;
public CalendarItem(int index, String description, ZonedDateTime textdate) {
this.index = index;
this.description = description;
this.textdate = textdate;
this.calculateDaysAway();
}
private void calculateDaysAway() {
this.daysAway = ChronoUnit.DAYS.between(textdate, ZonedDateTime.now(ZoneId.systemDefault()));
}
public long getDaysAway() {
return daysAway;
}
@Override
public int compareTo(CalendarItem o) {
if (this.daysAway < o.daysAway) {
return -1;
} else if (this.daysAway > o.daysAway) {
return 1;
} else {
return 0;
}
}
public static void main(String[] args) {
CalendarItem c1 =
new CalendarItem(0, "One", ZonedDateTime.of(2018, 5, 21, 0, 0, 0, 0, ZoneId.systemDefault()));
CalendarItem c2 =
new CalendarItem(0, "Two", ZonedDateTime.of(2018, 5, 4, 0, 0, 0, 0, ZoneId.systemDefault()));
CalendarItem c3 =
new CalendarItem(0, "Three",ZonedDateTime.of(2018, 5, 11, 0, 0, 0, 0, ZoneId.systemDefault()));
CalendarItem c4 =
new CalendarItem(0, "Four", ZonedDateTime.of(2018, 5, 1, 0, 0, 0, 0, ZoneId.systemDefault()));
List<CalendarItem> calendarItems = new ArrayList<>(Arrays.asList(c1, c2, c3, c4));
Collections.sort(calendarItems);
for (CalendarItem item : calendarItems) {
System.out.println("Item " + item.getDescription() + " is " + item.getDaysAway() + " days away.");
}
}
}
注意:我使用java 8中的ZonedDateTime
来表示日期。