第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我怎么能在一個(gè)類中編寫多個(gè)“compareTo”方法?

我怎么能在一個(gè)類中編寫多個(gè)“compareTo”方法?

慕的地6264312 2021-12-22 15:30:47
我正在按兩個(gè)對(duì)象比較和排序多個(gè)屬性,但為此我創(chuàng)建了不同的類來(lái)比較這些不同的屬性。這是在我的主要課程中:Collections.sort(Comparator, new SortByRef());        System.out.println("\nOrdenado por Referencia");        for(int i=0; i<Comparator.size(); i++)            System.out.println(Comparator.get(i));        Collections.sort(Comparator, new SortByMonto());        System.out.println("\nOrdenado por Monto");        for(int i=0; i<Comparator.size(); i++)            System.out.println(Comparator.get(i));        Collections.sort(Comparator, new SortByDes());        System.out.println("\nOrdenado por Descripcion");        for(int i=0; i<Comparator.size(); i++)            System.out.println(Comparator.get(i));        Collections.sort(Comparator, new SortByNP());        System.out.println("\nOrdenado por Numero de parte");        for(int i=0; i<Comparator.size(); i++)            System.out.println(Comparator.get(i));如您所見(jiàn),在 中Collections.sort,我SortBy...為每個(gè)類創(chuàng)建了不同的,我的意思是,不同的類。但我只想創(chuàng)建一個(gè)類來(lái)比較所有屬性。我怎么能做到?例如,這些是我創(chuàng)建的方法:public int compare(COSTOS ref1, COSTOS ref2) {        return ref1.referencia - ref2.referencia;}public int compare(COSTOS monto1, COSTOS monto2) {        return (int) (monto1.monto - monto2.monto);    }
查看完整描述

2 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為,您不想為每個(gè)排序順序創(chuàng)建一個(gè)單獨(dú)的類。但它不像你嘗試的那樣工作。我認(rèn)為, Comparator 是一個(gè)類型為 List 的變量。也許你應(yīng)該嘗試這樣的事情:


comparator.sort(comparing(c -> c.referencia));

System.out.println("\nOrdenado por Referencia");

comparator.forEach(System.out::println);

這里的“比較”方法是從 Java 類庫(kù)的類型 Comparator 靜態(tài)導(dǎo)入的。這使您無(wú)需新命名的頂級(jí)類即可成為新的比較器。


您應(yīng)該以小寫字母開(kāi)頭變量名(此處:Comparator)。這是 Java 中的通用約定。


查看完整回答
反對(duì) 回復(fù) 2021-12-22
?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

Comparator您可以創(chuàng)建多個(gè)進(jìn)行比較的方法,而不是創(chuàng)建多個(gè)實(shí)現(xiàn)接口的類。然后,方法本身基本上是(!) 的實(shí)現(xiàn)Comparator,您可以Collections#sort使用方法引用將其傳遞給方法。


根據(jù)比較實(shí)際發(fā)生的方式,更簡(jiǎn)潔的形式是使用這些Comparator#comparing方法,正如Donat 在他的回答 (+1) 中提到的那樣。具體來(lái)說(shuō),您可以comparingInt在示例中使用。此處顯示了兩種方法:


import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;


public class MultipleCompareMethods

{

    public static void main(String[] args)

    {

        List<Costos> list = new ArrayList<Costos>();


        list.add(new Costos(1,3));

        list.add(new Costos(4,5));

        list.add(new Costos(2,7));


        // Using Method references


        Collections.sort(list, MultipleCompareMethods::compareByReferencia);

        System.out.println("\nOrdenado por Referencia");

        for (int i = 0; i < list.size(); i++)

            System.out.println(list.get(i));


        Collections.sort(list, MultipleCompareMethods::compareByMonto);

        System.out.println("\nOrdenado por Monto");

        for (int i = 0; i < list.size(); i++)

            System.out.println(list.get(i));



        // Using Comparator#comparingInt:


        Collections.sort(list, Comparator.comparingInt(c -> c.referencia));

        System.out.println("\nOrdenado por Referencia");

        for (int i = 0; i < list.size(); i++)

            System.out.println(list.get(i));


        Collections.sort(list, Comparator.comparingInt(c -> c.monto));

        System.out.println("\nOrdenado por Monto");

        for (int i = 0; i < list.size(); i++)

            System.out.println(list.get(i));


    }


    static int compareByReferencia(Costos c0, Costos c1)

    {

        return Integer.compare(c0.referencia, c1.referencia);

    }

    static int compareByMonto(Costos c0, Costos c1)

    {

        return Integer.compare(c0.monto, c1.monto);

    }


}



class Costos

{

    int referencia;

    int monto;


    Costos(int referencia, int monto)

    {

        this.referencia = referencia;

        this.monto = monto;

    }


    @Override

    public String toString()

    {

        return "COSTOS [referencia=" + referencia + ", monto=" + monto + "]";

    }

}



class Costos

{

    int referencia;

    int monto;


    Costos(int referencia, int monto)

    {

        this.referencia = referencia;

        this.monto = monto;

    }


    @Override

    public String toString()

    {

        return "COSTOS [referencia=" + referencia + ", monto=" + monto + "]";

    }

}

如果你getReferencia在你的類中提供了方法,這可以更簡(jiǎn)潔地完成,再次使用方法引用:


Collections.sort(list, Comparator.comparingInt(Costos::getReferencia));

(從 Java 8 開(kāi)始,幾乎不需要實(shí)際實(shí)現(xiàn)自己的比較器類......)


查看完整回答
反對(duì) 回復(fù) 2021-12-22
  • 2 回答
  • 0 關(guān)注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)