[英]Sorting objects in an ArrayList based on their String field
伙计们! 我正在为uni进行课程学习,但遇到了一些困难。 我有一个类的层次结构和一个ArrayList,其中存储了这些类的对象。 我的代码打印出存储在ArrayList中的对象的详细信息,但是我必须根据String字段将其打印出来,但我不知道该怎么做。 我需要根据LibraryItem类中的标题字段打印详细信息,并且指定需要使用Java类库。 我浏览了一些内容,并根据所看到的内容猜测是否需要使用Comparable,但我不知道它的工作原理……这是代码的一部分:
public class LibraryItem {
private String title;
private String itemCode;
private int timesBorrowed;
...
public void printDetails()
{
System.out.println("\nTitle: " + title);
System.out.println("Item code: " + itemCode);
System.out.println("Cost: " + cost);
System.out.println("Times borrowed: " + timesBorrowed);
System.out.println("On loan: " + onLoan);
}
}
...
public abstract class AudioVisual extends LibraryItem{
private int playingTime;
public AudioVisual()
{
super();
playingTime = 80;
}
public void printDetails()
{
super.printDetails();
System.out.println("Playing time: " + playingTime);
}
...
public class CD extends AudioVisual{
private String artist;
private int noOfTracks;
public CD()
{
super();
artist = "The Animals";
noOfTracks = 9;
}
public void printDetails()
{
super.printDetails();
System.out.println("Artist: " + artist);
System.out.println("Number of tracks: " + noOfTracks);
}
...
public class DVD extends AudioVisual{
private String director;
public DVD()
{
director = "Director1";
}
public void printDetails()
{
super.printDetails();
System.out.println("Director: " + director);
}
...
public class Library
{
private ArrayList<LibraryItem> itemList;
public Library()
{
itemList = new ArrayList<LibraryItem>();
}
public void printAllDetails()
{
for (LibraryItem item: itemList)
{
item.printDetails();
}
}
再次将CD和DVD对象添加到ArrayList中。 先感谢您!
在Collections.sort上有一个需要Comparator的重载,您可以使用它,
Collection.sort(items, new Comparator<LibraryItem>{
@Override
public int compare(LibraryItem a, LibraryItem b) {
return a.title.compareTo(b.title);
}
}
如果您使用的是Java 8,那么使用lambdas的版本就不那么冗长了。
Collections.sort(items,(item1,item2) -> item1.title.compareTo(item2.title));
您可以通过两种方式进行操作:
无论选择哪种方式,您的实现都将如下所示:
public int compare(LibraryItem item1, LibraryItem item2) {//if you are implementing Comparator
return item1.getTitle().compareTo(item2.getTitle());//if you want to sort item by title
}
然后在打印列表之前,可以对它们进行排序:
Collections.sort(itemList, <comparator object>);//if using comparator or you could omit passing comparator object.
//iterate and print items
流方式(原始收藏未触及)
itemList.stream()
.sorted(Comparator.comparing(LibraryItem::getTitle))
.forEachOrdered(LibraryItem::printDetails);
收集到位(即有副作用)
Collections.sort(itemList, Comparator.comparing(LibraryItem::getTitle));
for (LibraryItem item : itemList) {
item.printDetails();
}
employee.stream()。collect(Collectors.summingInt(Employee :: getSalary)));
在这里,员工指出清单。 您可以用group by或类似的替代替换summingInt,Employee是类名,getSalary是需要排序的属性。
为了进一步参考,您可以浏览
http://download.java.net/lambda/b88/docs/api/java/util/stream/Collectors.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.