iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

從0開始學習Java系列 第 2

利用Comparator製作更客製化的排序

  • 分享至 

  • xImage
  •  

接續前一天的文章,利用Comparator製作更客製化的排序,排序條件:品牌不同就用品牌排序,品牌相同就比 RAM。

ComparatorRunner.java

package Geeks;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ComparatorRunner {
	public static void main(String[] args) {
		List<Laptop> laps = new ArrayList<>();
		laps.add(new Laptop("MSI", 10, 1000));
		laps.add(new Laptop("Asus", 16, 12000));
		laps.add(new Laptop("Sony", 8, 600));
		laps.add(new Laptop("Lenovo", 6, 900));
		laps.add(new Laptop("Asus", 8, 1200));
		

		// 更客製化的排序
		Comparator<Laptop> brandThenRamComparator = (l1, l2) -> {
			int brandResult = l1.getBrand().compareTo(l2.getBrand());
            
			if (brandResult != 0) {
				return brandResult; // 品牌不同就用品牌排序
			}
			return l1.getRam() - l2.getRam(); // 品牌相同就比 RAM
		};

		Collections.sort(laps, brandThenRamComparator);
		
		for (Laptop l2 : laps) {
			System.out.println(l2);
		}
	

	}
}

Laptop.java

package Geeks;

import java.util.Comparator;

public class Laptop{
	private String brand;
	private int ram;
	private int price;

	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public int getRam() {
		return ram;
	}

	public void setRam(int ram) {
		this.ram = ram;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "Laptop [brand=" + brand + ", ram=" + ram + ", price=" + price + "]";
	}

	// 加上建構子,才可以在ComparableRunner.java使用new Laptop("Apple",8,1200)等
	public Laptop(String brand, int ram, int price) {
		super();
		this.brand = brand;
		this.ram = ram;
		this.price = price;
	}
}


上一篇
Comparable vs Comparator 差異比較
下一篇
java.net 小筆記
系列文
從0開始學習Java21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言