我有以下API调用
cloudwatchClient.deleteInsightRules(
new DeleteInsightRulesRequest().withRuleNames(existingRuleNames));
失败是因为
[exec] Exception in thread "main" com.amazonaws.services.cloudwatch.model.MissingRequiredParameterException: BATCH_REQUEST_TOO_LARGE: Batch size cannot exceed 20 items. (Service: AmazonCloudWatch; Status Code: 400; Error Code: MissingRequiredParameterException; Request ID: 0f820dc2-38b8-11e9-8465-3718764429f1)
现在我明白了,我必须多次调用以删除Cloud watch的Insight规则,每20个块。
所以从概念上来说,我在寻找
existingRuleNames
.stream().
.chunkIntoSizeOf(20) // This is an imaginary method, i need to convert it into something concrete
.foreach(chunk -> cloudwatchClient.deleteInsightRules(
new DeleteInsightRulesRequest().withRuleNames(chunk));
现在,我在java 8 streams api中找不到任何允许我将列表分块处理的东西。有点像scala分组功能将列表拆分为多个元素数目固定的列表。
有人能帮我解决这个问题吗?谢谢当然,我可以使用命令式样式和子列表,但如果可以的话,我宁愿避免这样做。
在下面的forper中,您可以对块做任何您想做的事情:
//my list of 30 strings that needs to be processed (existingRuleNames in your case):
List<String> list = IntStream.range(0, 30).mapToObj(String::valueOf).collect(Collectors.toList());
AtomicInteger prev = new AtomicInteger(0);
IntStream.range(1, (int) (20 * (Math.ceil(Math.abs(list.size() / 20.0)))))
.filter(i -> i % 20 == 0 || i == list.size())
.forEach(i -> {
List<String> chunk = list.subList(prev.get(), i);
System.out.println("Processing " + chunk);
prev.set(i);
});
输出:
Processing [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Processing [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
所以你的代码应该看起来像:
List<String> existingRuleNames = ...;
AtomicInteger prev = new AtomicInteger(0);
IntStream.range(1, (int) (20 * (Math.ceil(Math.abs(existingRuleNames.size() / 20.0)))))
.filter(i -> i % 20 == 0 || i == existingRuleNames.size())
.forEach(i -> {
List<String> chunk = existingRuleNames.subList(prev.get(), i);
cloudwatchClient.deleteInsightRules(
new DeleteInsightRulesRequest().withRuleNames(chunk));
prev.set(i);
});
如何使用stream转换下面的代码而不使用for each循环。 getAllSubjects()返回所有列表,每个主题都有。所有列表应合并为。 需要从中获取 对象模型:
我有: 我想要: 似乎在scala中我可以写:< code>df.select($"value。_1 ",$ "值。_2 ",$ "值。_3"),但这在python中是不可能的。 那么有没有好的办法呢?
我有一个Pandas DataFrame列,其中包含一个列表中的多个列表。类似于这样: 我想将列表拆分为多列,因此输出应该是这样的: 请帮我做这件事。预先感谢
问题内容: 如果我有一个,如何通过使用Java 8的功能将其转换为以相同的迭代顺序包含所有对象的? 问题答案: 你可以用于将内部列表(将它们转换为Streams之后)展平为单个Stream,然后将结果收集到列表中:
在我的Spring Boot项目中,我有两个类(实体和模型) 在模型中有一个列表 :
问题内容: 在Java中将列表拆分为两个子列表的最简单,最标准和/或最有效的方法是什么?可以更改原始列表,因此无需复制。方法签名可以是 [EDIT] 返回原始列表上的视图,如果修改了原始视图,该视图将无效。因此,除非它也放弃了原始参考文献,否则无法使用(或者,如Marc Novakowski的回答所述,使用但立即复制结果)。 问题答案: 快速半伪代码: 它使用标准的List实现方法,并避免了所有循