我有以下功能。它接收一个数组列表。
在我的GUI上,我有一个按钮可以在两种状态之间切换。一个按字母顺序对列表进行排序,另一个按照外观顺序打印出列表。
请注意,我正在从外部文件填充arraylist,并且我在另一个函数中打开此文件,因此重新打开文件并使用其内容重新填充列表数组似乎是不必要的。
就像现在一样,列表按字母顺序排序,但不会按原始顺序打印。
如何创建一个单独的列表来保存已排序的列表,同时保持原始列表的顺序?
由于
sortButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (sortButton.getText().equals("Sort by Route")){
sortButton.setText("Sort Alphabetically");
Journey value = mapper.get(objectName);
ArrayList stops = value.getNewStop(); //loads an arraylist into stops
System.out.println(stops);
}
}
else if (sortButton.getText().equals("Sort Alphabetically")){
sortButton.setText("Sort by Route");
Journey value = mapper.get(objectName);
ArrayList stopsSorted = value.getNewStop(); // use the arraylist attribute
Collections.sort(stopsSorted);
System.out.println(stopsSorted);
}
}
}
});
答案 0 :(得分:1)
我将假设ArrayList
持有String
s:
ArrayList<String> stopsSorted = new ArrayList<>(value.getNewStop()); // use the arraylist attribute
Collections.sort(stopsSorted);
System.out.println(stopsSorted);
如您所见,我们将我们不想修改的ArrayList
传递给新ArrayList<String>
的构造函数。
答案 1 :(得分:0)
您应该能够克隆原始列表并对克隆进行排序。然后你只需切换你显示的内容 - 排序列表或原始列表。
ArrayList stopsSorted = stops.clone()
Collections.sort(stopsSorted);
System.out.println(stopsSorted)