リストコレクションは、同じ属性に基づいて類似したアイテムをマージします

使用するシーン:

開発中に、インポートされたExcelデータのデータ検証の必要性に遭遇しましたが、同じ列のデータ検証プロンプトは行数が異なるだけで、他は同じである可能性があります。データ検証プロンプトはすべて入力されているためです。メッセージボックス内では、読みやすくするために、類似したアイテムを同じタイプの検証情報とマージする必要があります。

処理ロジック:

1.検証情報クラスを定義します

イコールをハッシュコードメソッドに書き直し、マージメソッドを定義する必要があります(マージのロジック:行数をつなぎ合わせるためにここにいます)

lombok.Dataをインポートします。

@Data 
public class VerificationMessage { 
    private String sheetName; 
    プライベート文字列columnName; 
    プライベート文字列rowNum; 
    プライベート整数verifyType; 

    @Override 
    public int hashCode(){ 
        final int prime = 31; 
        int result = 1; 
        結果=プライム*結果+((sheetName == null)?0:sheetName.hashCode()); 
        結果=プライム*結果+((columnName == null)?0:columnName.hashCode()); 
        結果=プライム*結果+((verifyType == null)?0:verifyType.hashCode()); 
        結果を返します。
    } 

    @Override  
    public boolean equals(Object obj){
        if(this == obj)
            trueを返します。
        if(obj == null)は
            falseを返します。
        if(getClass()!= obj.getClass())は
            falseを返します。

        PreventMessage other =(VerifyMessage)obj; 
        if(sheetName == null){ 
            if(other.sheetName!= null)は
                falseを返します; 
        } else if(!sheetName.equals(other.sheetName))
            がfalseを返す; 

        if(columnName == null){ 
            if(other.columnName!= null)
                return false; 
        } else if(!columnName.equals(other.columnName))
            がfalseを返す; 

        if(verifyType == null){ 
            if(other.verifyType!= null)は
                falseを返します; 
        } else if(!verifyType.equals(other.verifyType))
            がfalseを返す; 
        trueを返します。
    } 

    static VerificationMessage merge(VerifyMessage m1、VerifyMessage m2){ 
        if(!m1.equals(m2)){ 
            throw new IllegalArgumentException(); 
        } 
        return new VerificationMessage(m1.sheetName、m1.columnName、m1.rowNum + "、" + m2.rowNum、m1.verifyType); 
    } 

    @Override 
    public String toString(){ 
        return "VerifyMessage {" + 
                "sheetName = '" + sheetName +' \ '' +
                "、columnName = '" + columnName +' \ '' + 
                "、
                "、verifyType =" + verifyType + 
                '}'; 
    } 

    public VerificationMessage(String sheetName、String columnName、String rowNum、Integer verifyType){ 
        this.sheetName = sheetName; 
        this.columnName = columnName; 
        this.rowNum = rowNum; 
        this.verifyType = verifyType; 
    } 
}

2.テストクラスを作成します 


    verifyMessageList.add(newVerifyMessage( "人员数データ-HR"、 "日期"、 "19"、RQGS.num)); 
    Map <VerifyMessage、VerifyMessage> map = new HashMap <>();
    for(VerifyMessage verifyMessage:verifyMessageList){ 
        if(map.containsKey(verifyMessage)){ 
            map.put(verifyMessage、VerifyMessage.merge(map.get(verifyMessage)、verifyMessage)); 
        } else { 
            map.put(verifyMessage、verifyMessage); 
        } 
    } 
    for(VerifyMessage verifyMessage:map.values()){ 
        System.out.println(verifyMessage); 
    } 
}

出力:

VerificationMessage {sheetName = 'personnel data-HR'、columnName = 'date'、rowNum = '5,14,19'、verifyType = 1}
VerificationMessage {sheetName = 'scheduling and target import'、columnName = 'scheduling duration'、rowNum = '1,3,7,9'、verifyType = 2}

総括する

実際のニーズに応じて、マージロジックを変更できます。

おすすめ

転載: blog.csdn.net/wangpei930228/article/details/108867240