gpt4 book ai didi

java - 如何简单地使用stream api编写代码

转载 作者:行者123 更新时间:2023-12-02 09:55:41 24 4
gpt4 key购买 nike

我有以下类(class):

@Getter
public class SomeClass implements Serializable {
private LocalDate date;
private String smth;
List<PairKeyValue> quotaParams;
}

PairKeyValue 类只是:

@Getter
public class PairKeyValue implements Serializable {

private String key;
private String value;
}

我想要执行以下操作:

1) 检查是否在 SomeClass's 中日期等于 sysdate 然后检查 key="somekey" 下的值在list<PairKeyValue>等于 1 ( somekey = 1 ),然后将其保留在列表中。

2) 检查是否在 SomeClass'sdate不等于sysdate然后检查 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));
}

我知道它看起来很糟糕,而且我知道它可以更具可读性,所以请帮忙。

最佳答案

如果我理解你的问题,最后两个函数可以恢复为以下内容:

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

我主要采用了您的代码并将其重新排列成一个过滤器。

关于java - 如何简单地使用stream api编写代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56026057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com