我正在嘗試重寫並重新計算下面的代碼,但在末尾沒有相同的結果(列表中的vgs不包含相同的結果執行這兩個功能)。 此外,我不明白我的代碼下面有什麼問題。有人能告訴我如何才能保持我的元素在List和Var中的順序,而不是Var和OrVars? 這個函數的目標是刪除和變量的所有空或空的String元素值& notVars list +我的字符串元素值和變量中的所有重複元素& notVars列表 對於每個varGroup元素並保持和變量元素的順序, notVars清單。謝謝代碼重新分解不會在末尾給出相同的結果
public static void RemoveDuplicateListElements(List<VarGroup> vgs) {
if (vgs == null) {
return;
}
for (VarGroup vg : vgs) {
RemoveDuplicateListElements(vg.getOrVars());
if (vg.getAndVars() != null) {
for (int x = vg.getAndVars().size()-1 ; x >= 0; x--) {
if (vg.getAndVars().get(x) == null
|| vg.getAndVars().get(x).isEmpty())
{
vg.getAndVars().remove(x);
} else {
for (int y = 0; y < x; y++) {
if (vg.getAndVars().get(x).equals(vg.getAndVars().get(y))) {
vg.getAndVars().remove(x);
break;
}
}
}
}
}
if (vg.getNotVars() != null) {
for (int x = vg.getNotVars().size()-1 ; x >= 0; x--) {
if (vg.getNotVars().get(x) == null
|| vg.getNotVars().get(x).isEmpty())
{
vg.getNotVars().remove(x);
} else {
for (int y = 0; y < x; y++) {
if (vg.getNotVars().get(x).equals(vg.getNotVars().get(y))) {
vg.getNotVars().remove(x);
break;
}
}
}
}
}
}
}
public class VarGroup {
private List<String> notVars = new ArrayList();
private List<VarGroup> orVars = new ArrayList();
private List<String> andVars = new ArrayList();
public List<VarGroup> getOrVs() {
return this.orVars;
}
public void setOrVars(List<VarGroup> orVars) {
this.orVars = orVars;
}
public List<String> getAndVars() {
return this.andVars;
}
public void setAndVars(List<String> andVars) {
this.andVars = andVars;
}
public List<String> getNotVars() {
return this.notVars;
}
public void setNotVars(List<String> notVars) {
this.notVars = notVars;
}
}
我的重構是在這裏:
public static void RemoveDuplicateListElements(List<VarGroup> vgs) {
if (vgs == null) {
return;
}
for (VarGroup vg : vgs) {
RemoveDuplicateListElements(vg.getOrVars());
if (vg.getAndVars() != null) {
vg.getAndVars().stream().distinct()
.filter(andVar -> Objects.nonNull(andVar) || !andVar.isEmpty())
.collect(Collectors.toList());
}
if (vg.getNotVars() != null) {
vg.getNotVars().stream().distinct()
.filter(notVar -> Objects.nonNull(notVar) || !notVar.isEmpty())
.collect(Collectors.toList());
}
}
}
請編輯該問題,將其限制爲具有足夠詳細信息的特定問題以確定適當的答案。避免一次詢問多個不同的問題。 –
(1)編寫通過原始代碼的測試(2)逐步重構並在每個步驟測試。 – assylias
另請注意,您的流操作不會執行任何操作(您將結果收集到列表中,但忽略返回的值)... – assylias