gpt4 book ai didi

Java Stream - 向后引用前一个类

转载 作者:行者123 更新时间:2023-12-02 10:13:27 26 4
gpt4 key购买 nike

我有两门课:

@Getter
@Setter
class Class
{
private Long id;

private String someValue;

private List<SubClass> subclasses;
}

@Getter
@Setter
class SubClass
{
private Long id;

private String someSearchValue;
}

我需要找到第一个Class和第一个SubClass,其中某些值与SubClass.someSearchValue字段匹配。

这就是所做的:

void someMethod(List<Class> classes){

SubClass foundSubClass = classes.stream()
.flatMap(c -> c.getSubclasses().stream())
.filter(sc -> "someValueToSearch".equals(sc.getSomeSearchValue()))
.findFirst().get();

Class someClass = classes.stream()
.filter(c -> c.getSubclasses().stream().anyMatch(sc -> "someValueToSearch".equals(sc.getSomeSearchValue())))
.findFirst().get();
}

如您所见,我必须使用相同的条件 "someValueToSearch".equals(sc.getSomeSearchValue()) 两次使用 filter 才能找到这两个对象。是否有可能仅使用 filter 一次找到这两个对象?我知道最简单的方法是在 Subclass 中放置对 Class 的引用,但我做不到。

有什么想法吗?

最佳答案

好吧,我们可以断言 foundSubClass 肯定是子 someClass - 第一个带有 someValueToSearch 的子类 - 因此肯定会提高效率通过反转流的顺序并在第二次搜索中仅查看 someClass 来获得。

您还可以通过使用方法引用来整理它,而不是定义相同的 lambda 两次。

Class someClass = classes.stream()
.filter(c -> c.getSubclasses().stream().anyMatch(Test::search))
.findFirst()
.get();

SubClass foundSubClass = someClass.getSubclasses().stream()
.filter(Test::search)
.findFirst()
.get();

//...

private static boolean search(SubClass subClass)
{
return "someValueToSearch".equals(subClass.getSomeSearchValue());
}

关于Java Stream - 向后引用前一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828850/

26 4 0