1 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
我從您的要求中了解到,您想要驗(yàn)證以下內(nèi)容: 1. 如果 excel 中的標(biāo)題是允許的標(biāo)題(強(qiáng)制和可選)。2. 如果存在強(qiáng)制標(biāo)頭。3. 強(qiáng)制標(biāo)頭是否有序。
這是一種解決方案。
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;
}
}
在這里,我假設(shè) headersFromExcel 字段是從 excel 中提取的標(biāo)題列表。
還有一件事,在您使用的代碼中,
if(headerCell.contains(validHeaders))
在這里,您應(yīng)該使用 containsAll() 而不是 contains(),因?yàn)?contains 會(huì)將傳遞的參數(shù)視為一個(gè)對(duì)象,并將與 ArrayList 的每個(gè)單獨(dú)單元格進(jìn)行比較,并且在您的情況下始終返回 false。
添加回答
舉報(bào)