java - 使用 Stream API 根据 JAVA 中的 2 个不同条件将数据流拆分为不同的列表
问题描述
我有一个双打列表(温度)。说:
1.0、2.0、3.0、4.0、......、20.0
我需要编写一个函数countTemperatures(t1,t2,range)
,它应该打印一个包含两对的列表:1)温度 t1 与区间[t1-r..t1+r]中温度的测量次数配对,2)温度 t2 配对测量区间[t2-r..t2+r]内的温度的次数。
示例:countTemperatures(17.0,10.0,2.0) 应该返回列表 ((17.0,5), (10.0,5)) (因为在 17.0-2.0 (15) 和 17.0+2.0 之间的范围内总共有 5 个测量值( 19). 即 15,16,17,18,19. 同样适用于第二对。
我需要演示 MapReduce(没有任何框架)并且只使用 java 8 流。
我想出了以下内容:
## List<Double> temperature = [1.0, 2.0, 3.0, ......, 20.0]
List<Double> temp = temperature.stream()
.collect(Collectors.groupingBy(t -> t>=(t1-r) && t<=(t1+r)));
System.out.println(temp.get(true));
我实际上想获得 2 个列表,其中的值根据上面给出的条件填充。然后想到使用 reduce() 或 count() 来得到答案。但我是 Java 新手,因为我不知道如何进一步进行,所以我一直坚持我的作业这个问题。我对所有视频和不同类型的问题感到困惑。
帮助将不胜感激。
解决方案
也许你想要这个?
public class Test {
public static void main(String[] args) {
List<Double> tmps = new ArrayList<>();
for (double i = 1.0;i<=20.0;i++){
tmps.add(i);
}
List<Double> param = new ArrayList<>();
param.add(17.0);
param.add(10.0);
param.add(2.0);
System.out.println(countBykey(param,tmps));
}
public static List<List<Double>> countByKey(List<Double> param,List<Double> tmps){
List<List<Double>> res = new ArrayList<>();
for (int i = 0;i<2;i++){
int finalI = i;
List<Double> e = new ArrayList<>();
e.add(param.get(finalI));
e.add((double) (int) tmps.stream().filter(aDouble -> (aDouble >= (param.get(finalI) - param.get(2)) &&
(aDouble <= (param.get(finalI) + param.get(2))))).count());
res.add(e);
}
return res;
}
}
输出:
[[17.0, 5.0], [10.0, 5.0]]
推荐阅读
- height - 如何以编程方式将 LinearLyout 的高度设置为 matchparent
- laravel-5 - Laravel - 用 table2 列更新 table1 列
- rstudio - 在 RStudio 中禁用文件更改检查
- c - 设置共享变量时应该使用临界区还是内存屏障?
- javascript - 为 ReactJS 对象动态添加一个 prop
- bash - {1..$n} 的大括号扩展
- latex - 如何在我的机器上只安装 cmap.sty 所需的包
- java - 单核细胞增多症
和通量 作为函数中的参数 - c# - 使用 ADFS 进行 Asp.net 核心身份验证。将按钮名称从 {wsfederation} 更改为我的首选名称
- java - 从 JTree Transferable TransferHandler 复制粘贴