使用するシーン:
開発中に、インポートされた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}総括する
実際のニーズに応じて、マージロジックを変更できます。