java - Java 8 循环特殊金字塔逻辑
问题描述
我有一个List<Integer> list=Arrays.asList(640,480,520,170,320,140,60);
并且我需要根据下面的迭代逻辑找到给定元素的总和。例如第一个外部迭代,如 640+480,然后 640+480+520,依此类推,直到 60。
下一次迭代从 480+520 开始,然后是 480+520 +170 等等。
示例 Java 7 程序就像
List<Integer> list=Arrays.asList(640,480,520,170,320,140,60);
List<Integer> newListWithSum=new ArrayList<>();
for(int mainIndex=0;mainIndex<list.size();mainIndex++) {
for(int index=mainIndex;index<list.size();index++) {
int sum=0;
for(int nestedIndex=mainIndex;nestedIndex<index+1;nestedIndex++) {
sum=sum+list.get(nestedIndex);
}
newListWithSum.add(sum);
}
}
但我需要将上述逻辑更改为 Java 8 版本。请帮助/分享提示以根据以下迭代编写简化的 Java 8 逻辑求和
解决方案
I feel this is much more similar to algorithm, let's go step by step
1) First get all the sublists by excluding first integer in each iteration
List<Integer> list=Arrays.asList(640,480,520,170,320,140,60);
List<List<Integer>> re = IntStream.range(0, list.size())
.mapToObj(sb->list.subList(sb, list.size()))
.filter(s->s.size()>1)
.collect(Collectors.toList());
re.forEach(ls->System.out.println(ls));
Output
[640, 480, 520, 170, 320, 140, 60]
[480, 520, 170, 320, 140, 60]
[520, 170, 320, 140, 60]
[170, 320, 140, 60]
[320, 140, 60]
[140, 60]
2) Now on each list do the sum
List<List<Integer>> re1 = re.stream()
.map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
.collect(Collectors.toList());
re1.forEach(ls->System.out.println(ls));
Output
[1120, 1640, 1810, 2130, 2270, 2330]
[1000, 1170, 1490, 1630, 1690]
[690, 1010, 1150, 1210]
[490, 630, 690]
[460, 520]
[200]
Combined solution of step 1 and step 2
List<List<Integer>> re = IntStream.range(0, list.size())
.mapToObj(sb->list.subList(sb, list.size()))
.filter(s->s.size()>1)
.map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
.collect(Collectors.toList());
推荐阅读
- java - Java - 如何仅使用 JVM Config 为某些协议禁用 TLS 密码?
- wordpress - 网站上所有页面的元标记“标题”
- php - PHP :"MYSQL 连接错误,"" 也是非对象属性" 错误
- powerbi - 如何根据 Power BI 中 B 列的值计算 A 列的出现次数
- java - Cometd,Spring-security:当前经过身份验证的用户在侦听器中不可用
- opengl - 在 OpenGL 3 中设置投影模式?
- javascript - Javascript通过包含搜索词的标签子数组过滤或减少每个JSON对象
- android-studio - android studio中的片段没有在我的手机上显示仪表板
- r - For循环和gsub R
- dialogflow-es - 想要保留持久值