gpt4 book ai didi

java - Google Guava - 如果元素的属性相对于另一个元素的属性,则按 one 的值过滤集合

转载 作者:行者123 更新时间:2023-11-29 05:30:00 25 4
gpt4 key购买 nike

我在这里的第一个问题的标题措辞不佳,但希望我仍然能得到答案!

我想要的是能够将以下代码片段中的 filterIt 方法链接到我现有的 FluentIterable 中。

我对 Guava 非常陌生(至少是它的函数式编程部分),所以请多多包涵。

import com.google.common.collect.Sets;
import org.joda.time.DateTime;
import org.joda.time.Days;

import java.util.Set;

public class Blah {
private DateTime date;

private Blah(final DateTime date) {
this.date = date;
}

public static void main(String[] args) {
Set<Blah> blahs = Sets.newHashSet(
new Blah(DateTime.now()),
new Blah(DateTime.now().minusDays(10)),
new Blah(DateTime.now().minusDays(21)),
new Blah(DateTime.now().minusDays(15))
);

Set<Blah> filteredBlahs = filterIt(blahs);

final int filtered = blahs.size() - filteredBlahs.size();

System.out.println(filtered + " results were filtered out");
}

private static Set<Blah> filterIt(final Set<Blah> blahs) {
final Set<Blah> filteredBlahs = Sets.newHashSet();

for (Blah currentBlah : blahs) {
final DateTime currentDate = currentBlah.date;

for (Blah blah : blahs) {
if (blah != currentBlah && !filteredBlahs.contains(blah)) {
final Days days = Days.daysBetween(currentDate, blah.date);

if (Math.abs(days.getDays()) < 5) {
filteredBlahs.add(currentBlah);
filteredBlahs.add(blah);
}
}
}
}

return filteredBlahs;
}
}

这段代码是作为我想要实现的示例快速编写的。我的问题是我希望这种类型的过滤发生在其他一些转换的中间,并且能够将它链接起来而不是将它拆分成不同的 Iterables 将使流程一目了然更容易理解.

非常欢迎任何关于我如何改进或澄清问题的反馈!

最佳答案

没有。

详细说明:您可以编写 Function 来提取日期,您可以编写 Predicates 来测试它们,但即使您找到了粘贴它们的方法一起,因为all those caveats会一团糟.您必须等待 JDK8 才能从中获得至少可远程读取的内容。

另一件事是您正在测试成对的 Blah(名称为 +1),这对于通用库来说确实太过分了。想象一下有无数这样的方法。

最后一件事是您所做的并不是真正的功能:您的条件取决于 filteredBlahs 列表,该列表在迭代过程中会发生变化。没关系,如果您需要它,但将其转换为具有功能性外观的东西会造成混淆。

用于过滤的谓词确实不应在此过程中更改,否则您可能会以未定义或令人困惑的行为运行,如 this issue .

关于java - Google Guava - 如果元素的属性相对于另一个元素的属性,则按 one 的值过滤集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458680/

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