java处理数据的一些小技巧

这篇博客介绍了如何使用Java处理集合数据,包括利用Stream API去除List中的重复值,将List转换为逗号分隔的String,查找List中的重复值。此外,还展示了如何递归获取实体类SysDept的子数据,通过遍历和递归查询构建部门的层级结构。
摘要由CSDN通过智能技术生成
  1. list处理掉重复的值

    List newList = list.stream().distinct().collect(Collectors.toList());
    
  2. List 快速转换成“,“号分隔的String;

    List<String> resNames = tableInfos.stream().map(AutoExcelToSqlDTO::getResName).collect(Collectors.toList());
    String join = String.join(",", nameStrList);
    
  3. List 快速找到重复的值

    List<String> nameStrList = new ArrayList<>();
    Map<AutoExcelToSqlDTO, List<AutoExcelToSqlDTO>> collect = tableInfos.stream().collect(Collectors.groupingBy(Function.identity()));
      for (Map.Entry<AutoExcelToSqlDTO, List<AutoExcelToSqlDTO>> autoExcelToSqlDTOListEntry : collect.entrySet()) {
          if (autoExcelToSqlDTOListEntry.getValue().size() > 1) {
              nameStrList.add(autoExcelToSqlDTOListEntry.getValue().get(0).getResName());
          }
      }
    
  4. 字符串去重

		String str = "aabbhhvbbbjkdf"
		char[] ch = str.toCharArray();
		Set<Object> set = new HashSet<Object>();
		StringBuilder sb = new StringBuilder();
		for(char c: ch) {
			if (set.add(c)) {
				sb.append(c);
			}
		}
		
		System.out.println(sb.toString());
	
  1. 递归子数据
    实体类
package com.shucha.projhigh.biz.model;


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sdy.common.model.BaseModel;
import com.sdy.common.utils.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 组织机构信息表
 * </p>
 *
 * @author cgj
 * @since 2021-07-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class SysDept extends BaseModel {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty(value = "主键")
    @TableId
    private Long id;

    /**
     * 上级节点部门id
     */
    @ApiModelProperty(value = "上级节点部门id")
    private Long parentId;

    /**
     * 部门名称(全称)
     */
    @ApiModelProperty(value = "部门名称(全称)")
    private String name;

    /**
     * 部门唯一code
     */
    @ApiModelProperty(value = "部门唯一code")
    private String code;

    @TableField(exist = false)
    private List<SysDept> childTestList;

}

实现

@Override
    public List<SysDept> test() {
        List<SysDept> oneList = list(Wrappers.<SysDept>lambdaQuery().eq(SysDept::getParentId, 0));
        List<SysDept> twoList = list(Wrappers.<SysDept>lambdaQuery().ne(SysDept::getParentId, 0));
        for (SysDept sysDept : oneList) {
            List<SysDept> sysDepts = iterateDepts(twoList, sysDept.getId());
            sysDept.setChildTestList(sysDepts);
        }
        return oneList;
    }

    public List<SysDept> iterateDepts(List<SysDept> twoList, Long pid){
        List<SysDept> result = new ArrayList<>();
        for (SysDept sysDept : twoList) {
            // 获取部门的id
            Long deptid = sysDept.getId();
            // 获取部门的父id
            Long parentid = sysDept.getParentId();
            if(parentid != null){
                if(parentid.equals(pid)){
                    // 递归查询当前子部门的子部门
                    List<SysDept> iterateDept = iterateDepts(twoList,deptid);
                    sysDept.setChildTestList(iterateDept);
                    result.add(sysDept);
                }
            }
        }
        return result;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值