// bean的属性值复制到目标bean中
.map(x -> {
SysUserAndUserServiceVO vo = new SysUserAndUserServiceVO();
BeanUtils.copyProperties(x, vo);
return vo;
})
// 获取Bean里面的属性值
.map(x -> x.name)
String experimenterNames = sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining("、"));
.map(x -> {
x.setChildren(null);
return x;
})
// 等价于
.peek((x) -> x.setChildren(null))
// 将流转化为List
.collect(Collectors.toList());
// 对流进行遍历输出
.forEach(x -> {
System.out.println(x)
});
// 过滤符合条件的流
.filter(x -> x.getParentId() == 0)
public class Test {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 3, 2, 8, 11, 4);
// 求和方式1
Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);
// 求和方式2
Optional<Integer> sum2 = list.stream().reduce(Integer::sum);
// 求和方式3
Integer sum3 = list.stream().reduce(0, Integer::sum);
// 求乘积
Optional<Integer> product = list.stream().reduce((x, y) -> x * y);
// 求最大值方式1
Optional<Integer> max = list.stream().reduce((x, y) -> x > y ? x : y);
// 求最大值写法2
Integer max2 = list.stream().reduce(1, Integer::max);
System.out.println("list求和:" + sum.get() + "," + sum2.get() + "," + sum3);
System.out.println("list求积:" + product.get());
System.out.println("list求和:" + max.get() + "," + max2);
/**
* @Result:
* list求和:29,29,29
* list求积:2112
* list求和:11,11
*
*/
}
}
public class MsAssessItem {
private Integer itemNconfig;
public Integer getItemNconfig() {
return itemNconfig;
}
public void setItemNconfig(Integer itemNconfig) {
this.itemNconfig = itemNconfig;
}
public static void main(String[] args) {
List<MsAssessItem> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
MsAssessItem msAssessItem = new MsAssessItem();
msAssessItem.setItemNconfig(5);
list.add(msAssessItem);
}
// 0 + 5 + 5 + 5 + 5 + 5
int sum = list.stream().map(MsAssessItem::getItemNconfig).reduce(0, Integer::sum, Integer::sum);
System.out.println(sum);
// 5 + 5 + 5 + 5 + 5 + 5
System.out.println(list.stream().map(MsAssessItem::getItemNconfig).reduce(5, Integer::sum, Integer::sum));
List<MsAssessItem> list1 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
MsAssessItem msAssessItem = new MsAssessItem();
msAssessItem.setItemNconfig(i % 2 == 0 ? null : 5);
list1.add(msAssessItem);
}
// 0 + null + null + 5 + null + 5
int sum = list1.stream().filter(x -> x.getItemNconfig() != null).map(MsAssessItem::getItemNconfig).reduce(0, Integer::sum, Integer::sum);
System.out.println(sum);
// 5 + null + null + 5 + null + 5
System.out.println(list1.stream().filter(x -> x.getItemNconfig() != null).map(MsAssessItem::getItemNconfig).reduce(5, Integer::sum, Integer::sum));
}
}
Q:listA里面包含了所有用户集合,listB里面包含了用户所拥有的主机数量集合。a.userId =b.userId
listA:
表A:
selectUserList()

listB:
表B:

统计用户服务列表里面业务用户的服务数量:selectUserServiceNum()
求listC:
(有没有大佬可以用sql语句来实现结果listC的结果)

stream流
public TableDataInfo listA() {
// 当前业务客户listA
List<SysUserAndUserServiceVO> list = userService.selectUserList(user).stream()
.map(x -> {
SysUserAndUserServiceVO vo = new SysUserAndUserServiceVO();
BeanUtils.copyProperties(x, vo);
return vo;
})
.collect(Collectors.toList());
// 统计用户服务列表里面业务用户的服务数量:listB
List<SysUserAndUserServiceVO> listB = userService.selectUserServiceNum(sysUserAndUserServiceVO);
// 当前业务客户list 与 服务数量的匹配
listA.forEach(
x -> {
List<SysUserAndUserServiceVO> collect = listB.stream()
// 当 a.userId =b.userId 的时候
.filter(userServiceNum -> userServiceNum.getUserId().equals(x.getUserId()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(collect)){
x.setServiceNum(0L);
}else {
x.setServiceNum(collect.get(0).getServiceNum());
}
}
);
return getDataTable(list);
}
数据库:暂定树的高度不超过3.

效果图:

用for循环
public List<AiBusinessTypeVO> selectAiBusinessTypeTree(AiBusinessType aiBusinessType) {
// 查询所有的数据
aiBusinessType.setParentId(0L);
aiBusinessType.setDelFlag(DelFlag.OK.getCode());
List<AiBusinessTypeVO> oneList = aiBusinessTypeService.selectAiBusinessTypeListVO(aiBusinessType);
for (AiBusinessTypeVO businessType : oneList) {
AiBusinessType tempBusinessType = new AiBusinessType();
List<AiBusinessTypeVO> twoList = aiBusinessTypeService.selectAiBusinessTypeListVO(tempBusinessType);
businessType.setAiBusinessTypes(twoList);
for (AiBusinessTypeVO type : twoList) {
tempBusinessType = new AiBusinessType();
List<AiBusinessTypeVO> threeList = aiBusinessTypeService.selectAiBusinessTypeListVO(tempBusinessType);
type.setAiBusinessTypes(threeList);
}
}
return getDataTable(oneList);
}
stream流
查询树级结构的代码
public List<AiBusinessTypeVO> selectAiBusinessTypeTree(AiBusinessType aiBusinessType) {
// 查询出所有的数据集合allList
List<AiBusinessTypeVO> allList = aiBusinessTypeMapper.selectAiBusinessTypeListVO(aiBusinessType);
// 新建一个最终返回的集合 list
List<AiBusinessTypeVO> list = new ArrayList<>();
allList.stream()
// 返回第一层的集合
.filter(x -> x.getParentId() == 0)
// 遍历第一层集合
.forEach(x -> {
// 把遍历出来的第一层:x 放到最终结果集合:list 里面
list.add(x);
// 遍历的第一层:x, 所有得数据集合
getAiBusinessTypeChildren(x, allList);
});
return list;
}
/**
* 获取当前层数的子结构数据
*
* @param aiBusinessType 第N层数据
* @param allList 所有的数据合集
*/
private void getAiBusinessTypeChildren(AiBusinessTypeVO aiBusinessType, List<AiBusinessTypeVO> allList) {
// 新建空的子数据集合:children
List<AiBusinessTypeVO> children = new ArrayList<>();
// 设置第 N 层的子数据:children
aiBusinessType.setChildren(children);
// 遍历所有的数据集合
allList.stream()
// 过滤出第 N+1 层数据
.filter(x -> x.getParentId().equals(aiBusinessType.getId()))
// 遍历第 N+1 层数据
.forEach(x -> {
//空的子数据集合:children,存放第 N+1 层数据
children.add(x);
// 继续获取 N+1 层子数据结构
getAiBusinessTypeChildren(x,allList);
});
}
返回的 List
@Data
public class AiBusinessTypeVO {
/**
* id
*/
private Long id;
/**
* 场景分类名称
*/
private String businessTypeName;
/**
* 子级数据
*/
private List<AiBusinessTypeVO> children;
}
Set<String> strings = list.stream().map(StorehouseGermplasmRef::getGermplasmStorehouseCode).collect(Collectors.toSet());
String result = String.join(", ", strings);