Java 如何简单地使用流api编写代码
我有以下课程:Java 如何简单地使用流api编写代码,java,java-stream,Java,Java Stream,我有以下课程: @Getter public class SomeClass implements Serializable { private LocalDate date; private String smth; List<PairKeyValue> quotaParams; } 我想做以下工作: availableQuotes = availableQuotes.stream() .filter(availableQuote
@Getter
public class SomeClass implements Serializable {
private LocalDate date;
private String smth;
List<PairKeyValue> quotaParams;
}
我想做以下工作:
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());
1) 检查SomeClass的date是否等于sysdate,然后检查list
中key=“somekey”
下的值是否等于1(somekey=1
),然后将其保留在列表中
2) 检查SomeClass的date
是否不等于sysdate
,然后检查List
中key=“somekey”
下的值是否等于0(somekey=0
),然后将其保留在列表中
3) 忽略其他值
因此,最后我需要一个过滤列表,其中只包含SomeClass
中的当前值
我有我的实现,但我不喜欢它不只是使用流API:
availableQuotes=ArrayList()
if(CollectionUtils.isNotEmpty(availableQuotes)){
availableQuotes=availableQuotes
.stream()
.filter(this::checkDate).collect(toList());
}
私有布尔检查日期(SomeClass SomeClass){
如果(someClass.getDate().equals(LocalDate.now())){
返回检查持续时间(someClass,“0”);
}否则{
返回检查持续时间(someClass,“1”);
}
}
私有布尔检查持续时间(SomeClass SomeClass,字符串参数){
List quotaParams=someClass.getPairKeyValues().stream()
.filter(spKeyValue->spKeyValue.getKey().equals(“持续时间”))
.filter(spKeyValue->spKeyValue.getValue().equals(参数))
.collect(toList());
返回(CollectionUtils.isNotEmpty(quotaParams));
}
我知道它看起来很糟糕,而且我知道它的可读性更高,因此请提供帮助。如果我正确理解了您的问题,最后两个函数可以恢复为以下内容:
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());
我主要是将您的代码重新安排到一个过滤器中。那么您想重写所有函数,使其包含在一个流过滤器中吗?什么是可用的?我认为更完整的代码将是有益的:)SPQuota类包含什么?@PaulLemarchand你怎么能看出我使用了2个私有方法,但我知道还有一个实现没有任何支持methods@triForce420这只是一个列表
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());