我有以下課程:@Getterpublic class SomeClass implements Serializable { private LocalDate date; private String smth; List<PairKeyValue> quotaParams;}類 PairKeyValue 只是:@Getterpublic class PairKeyValue implements Serializable { private String key; private String value;}我想做以下事情:1) 檢查 inSomeClass's日期是否等于 sysdate 然后檢查 in 下key="somekey"的值list<PairKeyValue>是否等于 1 ( somekey = 1) 然后將其留在列表中。2) 檢查 in SomeClass's dateNOT 是否等于sysdate然后檢查 in 下key="somekey"的值List<PairKeyValue>是否等于 0 ( somekey = 0) 然后將其留在列表中。3)并忽略其他值。所以最后我需要一個僅包含當前值的過濾列表SomeClass。我有我的認識,但我不喜歡它不只使用流 API:availableQuotes = ArrayList(); if (CollectionUtils.isNotEmpty(availableQuotes)) { availableQuotes = availableQuotes .stream() .filter(this::checkDate).collect(toList()); } private boolean checkDate (SomeClass someClass){ if (someClass.getDate().equals(LocalDate.now())) { return checkDuration(someClass, "0"); } else { return checkDuration(someClass, "1"); } } private boolean checkDuration (SomeClass someClass, String param){ List<PairKeyValue> quotaParams = someClass.getPairKeyValues().stream() .filter(spKeyValue -> spKeyValue.getKey().equals("duration")) .filter(spKeyValue -> spKeyValue.getValue().equals(param)) .collect(toList()); return (CollectionUtils.isNotEmpty(quotaParams)); }我知道它看起來很糟糕,而且我知道它可以更具可讀性,所以請幫忙。
1 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
如果我正確理解了您的問題,則可以將最后兩個功能恢復為以下內容:
availableQuotes = availableQuotes.stream()
.filter(availableQuote -> availableQuote.getQuotaParams().stream()
.anyMatch(quotaParam -> quotaParam.getKey().equals("duration")
&& quotaParam.getValue().equals(availableQuote.getDate().equals(LocalDate.now()) ? "0" : "1")))
.collect(Collectors.toList());
我主要把你的代碼重新排列成一個過濾器。
添加回答
舉報
0/150
提交
取消