arr.stream() .map可以循环吗
时间: 2023-07-22 18:03:01 浏览: 210
`map()`方法并不是用于循环,而是用于对流中的每个元素进行转换操作。它将每个元素映射为另一个元素,并将转换后的元素组成一个新的流返回。
在上述代码中,`arr.stream().map(...)`将会对`arr`中的每个元素应用转换操作,并将转换后的结果组成一个新的流返回。这个新的流可以继续进行其他操作,比如收集到列表、聚合操作等。
如果你想要对流中的元素进行循环操作,可以使用`forEach()`方法。例如:
```java
arr.stream().forEach(item -> {
// 在这里进行循环操作
});
```
`forEach()`方法会对流中的每个元素应用指定的操作。在上述代码中,Lambda表达式`item -> { ... }`就是要应用的操作,你可以在其中编写循环逻辑。
相关问题
import java.util.Arrays; import java.util.Scanner; public class Main { // 输入获取 public static void main(String[] args) { Scanner sc = new Scanner(System.in); Integer[] arr = Arrays.stream(sc.nextLine().split(",")).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(arr)); } // 算法入口 public static int getResult(Integer[] arr) { int n = arr.length; int[] dp = new int[n]; for (int i = 0; i < n; i++) { if (i == 0) { dp[0] = Math.max(0, arr[0]); } else if (i < 3) { dp[i] = Math.max(0, dp[i - 1] + arr[i]); } else { dp[i] = Math.max(dp[i - 3], dp[i - 1] + arr[i]); } } return dp[n - 1]; } }为什么动态规划返回的是dp[n-1]
动态规划返回的是`dp[n-1]`是因为在这个算法中,`dp[i]`表示以第`i`个元素结尾的子数组的最大和。我们需要找到整个数组中的最大和子数组,因此最终的结果就是`dp[n-1]`,其中`n`是数组的长度。
在算法的循环中,我们计算了每个位置上的最大和子数组,并将其保存在`dp`数组中。最后,`dp[n-1]`就是整个数组的最大和子数组的和。
希望对你有所帮助!如果你还有其他问题,请随时提问。
List<SkuTable> skuTables = goodsItem.getSkuTable(); for (Map.Entry<String, Integer> entry : skuMapById.entrySet()) { StringBuilder sb = new StringBuilder(); String key = entry.getKey(); String[] arr = key.split("-");//将属性值分割去skuTable内转换出前端传入的组合 for (int i = 0; i < arr.length; i++) { for (SkuTable skuTable : skuTables) { if (null == skuTable.getValue() || ((List<?>) skuTable.getValue()).stream().count() == 0) continue;//若没有选中的值则结束本次循环 for (SkuTable table : skuTable.getOptions()) { if (arr[i].equals(table.getId())) {//若前端选中值的list内有该建,则将之转为前端传入的id sb.append(table.getWebId()).append("-"); } } } } if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1); GoodsSkuExtend extend = skuExtendMap.get(sb.toString()); if (null == extend) {//若没有渠道数据则将key分割比较数组是否一致 String[] dataArr = sb.toString().split("-"); for (Map.Entry<String, GoodsSkuExtend> webEntry : skuExtendMap.entrySet()) { String[] webArr = webEntry.getKey().split("-"); Arrays.sort(dataArr); Arrays.sort(webArr); if (Arrays.equals(dataArr, webArr)) {// 比较两个数组是否一致 extend = skuExtendMap.get(webEntry.getKey()); break; } } } if (null == extend) throw new NullPointerException("数据异常,请检查后重新提交!"); extend.setSkuId(entry.getValue()); }
这段代码的功能是根据前端传入的SKU属性值,将其转换为对应的SKU ID,并将其设置为对应的渠道数据(GoodsSkuExtend)的SKU ID。具体实现步骤为:首先,遍历之前生成的SKU属性值ID和SKU ID的HashMap,对于每个SKU属性值ID,先将其转换为前端传入的SKU属性值组合,然后遍历商品的SKU属性列表,找到对应的SKU属性值,并将其对应的前端传入的SKU属性值ID转换为前端传入的ID,拼接成一个新的SKU属性值组合。然后,根据这个新的SKU属性值组合,从之前生成的SKU属性值组合和渠道数据的HashMap中查找对应的渠道数据,并将其对应的SKU ID设置为当前SKU的ID。如果找不到对应的渠道数据,则通过比较SKU属性值组合数组是否一致来查找对应的渠道数据。如果仍然找不到,则抛出一个空指针异常。
阅读全文