我需要基于一大堆过滤器运行两个不同的任务
我刚刚掌握 Lambda 的概念,所以我想我的问题是,如何在 Lambda 中处理多个包含复杂逻辑的“其他”条件?
我知道我可以使用 filter 和 map 来选择某些数据。 “嵌套”如何与过滤器一起使用?
我可以这样做吗:
//Iterate over list of sites
sites.stream()
//Check if current site is active
.map(isActive ?
//{Do something with site because site is active};
//Set a variable for later user maybe?
:
//{Do something else involving the current site because it's not?};
//Set a different variable maybe?
);
//use variable from first map?
当我运行这些让我感到迷惑的抽象过程时,有人能为我提供一些正确的语法以及我对数据所做的基本解释吗?
其次,如果我想并行运行这两个 map 进程,我会这样做吗?
sites.stream().parallel()?
像往常一样,感谢您帮助我克服无知!
最佳答案
lambda 用法的一些示例:
您可以按 Activity 和非 Activity 对您的网站进行分组,之后您可以对两者执行一些逻辑。将大逻辑放入方法中,然后调用 map()
函数。
您也可以使用 filter()
来只获取流的一部分。
public class Lambda {
static class Site {
public boolean isActive;
public boolean otherCondition;
public boolean isActive() {
return isActive;
}
public boolean isOtherCondition() {
return otherCondition;
}
public void setProperty(String property) {
}
}
public static Site someOperation(Site site) {
//some code
return site;
}
public static void main(String[] args) {
ArrayList<Site> sites = new ArrayList<>();
Map<Boolean, List<Site>> groupedSites = sites.stream().collect(Collectors.groupingBy(Site::isActive));
groupedSites.get(Boolean.TRUE).stream().filter(Site::isOtherCondition).map(Lambda::someOperation).forEach(p -> p.setProperty("something"));
}
}
关于Java 8 Lambda 处理 > if > else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36340556/