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());