如果boolean為false,需要從計劃中洗掉所有關稅。如何撰寫代碼來洗掉所有的?我試著用removeAll,但不作業。也許有可能簡化這段代碼?只需要檢查該計劃是否有N和M代碼的關稅。如果沒有或者只有一個代碼(M或N),那么就洗掉所有關稅。
List < Plan > plan = new ArrayList < Plan > ()。
plan.addAll(plans2)。
boolean t = false;
for (int i = 0; i< plan.size(); i ) {
List < Tariff > tariff = new ArrayList < Tariff > ();
tariff.addAll(plan.get(i).getTariff())。
for (int j = 0; j < tariff.size(); j ) {
if (tariff.get(j).getCode().equals("N"/span>)) {
for (int jj = 0; jj< tariff.size(); jj ) {
if (tariff.get(jj).getCode().equals("M"/span>)) {
t = true;
}
}
}
}
//How to remove here?
if (!t) {
//plan.get(i).getTariff().remove();
}
}
uj5u.com熱心網友回復:
下面是一個簡化的(假設你對lambda函式和流感到滿意)實作:
public void someMethod() {
...
plans.forEach(p -> cleanTariffs(p)); // 替換外部for回圈。
...
}
private void cleanTariffs(Plan plan) {
if (!containsAllRequiredCodes(plan.getTariffs() ) ) {
plan.getTariffs().clear()。
}
}
private boolean containAllRequiredCodes(List<Tariff>tariffs) {
return tariffs.stream()
.map(Tariff::getCode)
.collect(Collectors.toSet()) //將關稅代碼映射為一個Set<String>,提供O(1)查詢。
.containsAll(REQUIRED_TARIFF_CODES)。
}
private static final Set<String> REQUIRED_TARIFF_CODES = Set. of("M"/span>, "N"/span>)。
uj5u.com熱心網友回復:
如果布林值為假,需要從計劃中移除所有的關稅。
我看了你的嘗試,似乎你在做一些多余的操作。 例如,你用來獲取代碼的嵌套回圈并沒有意義。一個代碼可以同時擁有兩個不同的值,這種隱含的邏輯也是如此。
但是你可以試試這樣的方法。
removeIffor (Plan p : plan) {
p.getTariff().removeIf(tariff-> tariff.getCode().equals("N"/span>) ||
tariff.getCode().equals("M"))。)
}
我可能把洗掉的條件弄錯了,所以你可能要改變它。 如果代碼是N或M,這將洗掉關稅。
注意,如果getCode()回傳一個代碼串列,并且你需要同時檢查N和M,你可以用以下陳述句代替洗掉陳述句:
p.getTariff().removeIf(tariff->
tariff.getCode().containsAll(List.of("N","M"))。)
重要的是,getTariff回傳實際的串列,而不是一個副本。
uj5u.com熱心網友回復:
使用流API:
plan.stream().forEach(p-> { List<Tariff> tariffList = p.getTariff();
if(tariffList.stream()
.map(Tariff::getCode)
.filter(code -> code.equals("M"/span>)||
code.equals("N"))
.distinct()
.count()==2)
tariffList.clear()。
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/328903.html
標籤:
