for (GoodsSku sku : skuList) { String[] arr = sku.getSkuAttribute().split(":"); List<Integer> list = new ArrayList<>(); for (int i = 1; i < arr.length; i += 2) { list.add(Integer.parseInt(arr[i])); } }改为计算代码
时间: 2024-03-15 18:47:36 浏览: 25
这段代码可以改写为:
```
for (GoodsSku sku : skuList) {
String[] arr = sku.getSkuAttribute().split(":");
List<Integer> list = new ArrayList<>();
IntStream.range(1, arr.length)
.filter(i -> i % 2 == 1)
.mapToObj(i -> Integer.parseInt(arr[i]))
.forEach(list::add);
}
```
这里使用了 Java 8 中的 Stream API,更加简洁和易读。`IntStream.range()` 生成一个指定范围的整数流,`filter()` 过滤出奇数下标的元素,`mapToObj()` 将这些元素转换成整数对象,最后使用 `forEach()` 把它们加入到列表中。
相关问题
public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) { // 将list1和list2的skuAttribute字段的值分割、排序后存入set中 Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); list1.forEach(item -> set1.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")))); list2.forEach(item -> set2.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")))); // 遍历list2,如果list1中不包含当前元素,则说明该skuAttribute字段的值为新增,将其插入到数据库中 for (GoodsSku sku : list2) { String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")); if (!set1.contains(sortedSku)) { sku.insert(); } } // 遍历list1,如果list2中不包含当前元素,则说明该skuAttribute字段的值需要删除,将其从数据库中删除 for (GoodsSku sku : list1) { String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")); if (!set2.contains(sortedSku)) { sku.deleteById(); } } return list1; }这段代码,要返回一个以list1为主的新的list,其中执行insert的数据写入到新的list里面,删除的数据不存在于新的list里面,怎么实现
可以在方法内部创建一个新的 List,将需要插入到数据库中的 GoodsSku 对象添加到该 List 中,同时从 list1 中删除需要从数据库中删除的 GoodsSku 对象,最后将新创建的 List 返回即可。
以下是实现的示例代码:
```
public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) {
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
list1.forEach(item -> set1.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
list2.forEach(item -> set2.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
List<GoodsSku> result = new ArrayList<>(list1);
for (GoodsSku sku : list2) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set1.contains(sortedSku)) {
sku.insert();
result.add(sku);
}
}
for (GoodsSku sku : list1) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set2.contains(sortedSku)) {
sku.deleteById();
result.remove(sku);
}
}
return result;
}
```
在这个实现中,我们创建了一个名为 result 的新 List,将 list1 的元素全部添加到 result 中。当需要插入一个新的 GoodsSku 时,我们不仅需要执行它的 insert() 方法,还需要将它添加到 result 中;当需要从数据库中删除一个 GoodsSku 时,我们不仅需要执行它的 deleteById() 方法,还需要从 result 中移除它。最后,我们将 result 返回即可。
public List<String> compareList(List<GoodsSku> list1, List<GoodsSku> list2) { List<String> result = new ArrayList<>(); // 将list1和list2的skuAttribute字段的值分割、排序后存入set中 Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); list1.forEach(item -> set1.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")))); list2.forEach(item -> set2.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")))); // 遍历set1,如果set2中包含当前元素,则说明该skuAttribute字段的值重复,将其加入结果集中 for (String sku : set1) { if (set2.contains(sku)) { result.add(sku); } } return result; }把这段代码改成返回的是整个goodsSku的实体list
好的,可以参考下面的代码实现:
```
public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) {
List<GoodsSku> result = new ArrayList<>();
// 将list1和list2的skuAttribute字段的值分割、排序后存入set中
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
list1.forEach(item -> set1.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
list2.forEach(item -> set2.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
// 遍历list1,如果list2中包含当前元素,则说明该skuAttribute字段的值重复,将其加入结果集中
for (GoodsSku sku : list1) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (set2.contains(sortedSku)) {
result.add(sku);
}
}
return result;
}
```
注意,这里需要将遍历的对象从set改成list1,因为我们需要返回的是list1中与list2重复的GoodsSku实体对象。同时,需要在遍历list1时对skuAttribute字段进行排序后再进行比较。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)