1 回答

TA貢獻1921條經驗 獲得超9個贊
我從您的要求中了解到,您想要驗證以下內容: 1. 如果 excel 中的標題是允許的標題(強制和可選)。2. 如果存在強制標頭。3. 強制標頭是否有序。
這是一種解決方案。
public class HeaderProblem {
public static void main(String[] args) {
List<String> headersFromExcel = Arrays.asList("EMail", "Phone", "Address", "Last Name", "First Name");
System.out.println(validate(headersFromExcel));
}
private static boolean validate(List<String> headers) {
List<String> mandatoryHeaders = Arrays.asList("First Name", "EMail", "Phone");
List<String> optionalHeaders = Arrays.asList("Last Name", "Address");
List<String> allHeaders = new ArrayList<>(mandatoryHeaders);
allHeaders.addAll(optionalHeaders);
Map<String, Integer> headerIndexMap = IntStream.range(0, headers.size())
.boxed()
.collect(Collectors.toMap(i -> headers.get(i), i -> i));
if(!allHeaders.containsAll(headers)) {
System.out.println("Some headers exist which are not allowed");
return false;
}
if (!headers.containsAll(mandatoryHeaders)) {
System.out.println("Mandatory headers are not present");
return false;
}
System.out.println(mandatoryHeaders.stream()
.map(headerIndexMap::get)
.collect(Collectors.toList()));
// Check if the manadatory headers are in order
Integer result = mandatoryHeaders.stream()
.map(headerIndexMap::get)
.reduce(-1, (x, hi) -> x < hi ? hi : headers.size());
if (result == headers.size()) {
System.out.println("Mandatory headers are not in order");
return false;
}
return true;
}
}
在這里,我假設 headersFromExcel 字段是從 excel 中提取的標題列表。
還有一件事,在您使用的代碼中,
if(headerCell.contains(validHeaders))
在這里,您應該使用 containsAll() 而不是 contains(),因為 contains 會將傳遞的參數視為一個對象,并將與 ArrayList 的每個單獨單元格進行比較,并且在您的情況下始終返回 false。
添加回答
舉報