[英]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.