可以自己在 Stream里面新增吗
时间: 2024-03-04 18:51:27 浏览: 56
可以。在Stream中,您可以使用Stream API向您的应用程序添加新的数据。您可以使用不同的Stream API,如Java Stream API、JavaScript Stream API等。在Stream中,您可以对数据进行各种操作,如过滤、排序、映射等,以便对数据进行处理和转换。您还可以使用Stream API将数据写入数据库或文件,或从数据库或文件中读取数据。总的来说,Stream API是一种非常有用的工具,用于处理和转换数据。
相关问题
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里面,怎么实现
可以在遍历 `list1` 时,将需要删除的元素从 `list1` 中移除,同时将需要添加的元素添加到 `list1` 中,最终返回 `list1` 即可。以下是示例代码:
```
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字段的值为新增,将其插入到数据库中,并添加到list1中
for (GoodsSku sku : list2) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set1.contains(sortedSku)) {
sku.insert();
list1.add(sku);
}
}
// 遍历list1,如果list2中不包含当前元素,则说明该skuAttribute字段的值需要删除,将其从数据库中删除,并从list1中移除
Iterator<GoodsSku> iterator = list1.iterator();
while (iterator.hasNext()) {
GoodsSku sku = iterator.next();
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set2.contains(sortedSku)) {
sku.deleteById();
iterator.remove();
}
}
return list1;
}
```
List<Long> newAccessIdList = requestDataPermissionVo.getAccessIdList(); // 查询数据库里面的数据 List<Long> oldAccessIdList = menuInfoMapper.getUserDataPermission(requestDataPermissionVo.getUserId()).stream().map(ResponseDataPermissionVo::getAccessId).collect(Collectors.toList()); List<Long> unionList = CollectionUtil.intersection(newAccessIdList, oldAccessIdList).stream().collect(Collectors.toList()); // 去交集后即为需删除的 oldAccessIdList.removeAll(unionList); // 去交集后即为需新增的 newAccessIdList.removeAll(unionList); // 要删除的权限 if(ObjectUtil.isNotEmpty(oldAccessIdList)){ UpdateWrapper<TrUserAccess> updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().set(TrUserAccess::getIsDeleted, CommonYNEnums.YES.getCode()) .in(TrUserAccess::getAccessId, oldAccessIdList) .eq(TrUserAccess::getUserId, requestDataPermissionVo.getUserId()) .eq(TrUserAccess::getIsDeleted, CommonYNEnums.NO.getCode()); update(new TrUserAccess(), updateWrapper); }对以上进行单元测试
对以上代码进行单元测试的步骤如下:
1. 创建测试类,并导入相关的依赖库和类。
2. 在测试类中创建一个测试方法。
3. 在测试方法中,创建一个 requestDataPermissionVo 对象,并设置相关属性。
4. 创建一个 mock 对象来模拟 menuInfoMapper 的行为,并设置返回值。
5. 调用被测试的方法,传入 requestDataPermissionVo 对象和 mock 对象。
6. 使用断言来验证期望的结果是否与实际结果一致。
以下是一个可能的单元测试示例:
```java
// 导入相关的依赖库和类
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.List;
// 导入被测试的类
import com.example.YourPackageName.YourClassName;
import com.example.YourPackageName.RequestDataPermissionVo;
import com.example.YourPackageName.MenuInfoMapper;
import com.example.YourPackageName.TrUserAccess;
import com.example.YourPackageName.CommonYNEnums;
class YourClassNameTest {
@Test
void testYourMethodName() {
// 创建测试数据
RequestDataPermissionVo requestDataPermissionVo = new RequestDataPermissionVo();
requestDataPermissionVo.setUserId(123);
List<Long> accessIdList = new ArrayList<>();
accessIdList.add(1L);
accessIdList.add(2L);
requestDataPermissionVo.setAccessIdList(accessIdList);
// 创建 mock 对象并设置返回值
MenuInfoMapper menuInfoMapper = Mockito.mock(MenuInfoMapper.class);
List<ResponseDataPermissionVo> responseList = new ArrayList<>();
ResponseDataPermissionVo response1 = new ResponseDataPermissionVo();
response1.setAccessId(1L);
responseList.add(response1);
Mockito.when(menuInfoMapper.getUserDataPermission(123)).thenReturn(responseList);
// 创建被测试的对象
YourClassName yourClassName = new YourClassName();
// 调用被测试的方法
yourClassName.yourMethodName(requestDataPermissionVo, menuInfoMapper);
// 使用断言来验证期望的结果是否与实际结果一致
Mockito.verify(menuInfoMapper, Mockito.times(1)).getUserDataPermission(123);
}
}
```
请注意,这只是一个示例,根据你的具体情况和要求进行适当的修改和调整。
阅读全文