查询显示所有字段 并同时DISTINCT其中某一字段去重

查询显示所有字段 并按照其中某一字段去重

需要在查询所有字段的同时 按照某一个字段去重 初期预想使用DISCONNECT这样

SELECT  DISCONNECT (pe.PID),* FROM PE_PO_ORDER pe
		LEFT JOIN PE_PO_ORDER_ITEM item ON pe.PID=item.PO_ID
		WHERE pe.DELETE_FLAG = 0 AND pe.ON_LINE_STATUS = 1
  		<if test="vendorId != null and vendorId != ''">
			AND pe.VENDOR_ID = #{vendorId, jdbcType=VARCHAR}
		</if>

但是不太行 正常来说是可以的(我这边逻辑不允许按上面方式操作)! 我的做法是直接SELECT * 查询所有 我需要的字段之后 返回一个List 后再 根据Object的某一个属性去重 去重工具代码如下:

//去重算法
	public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
		Map<Object, Boolean> seen = new ConcurrentHashMap<>();
		return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
	}

后使用改工具类进行去重:

//查询出需要的所有记录
List<PoOrder> poOrders = poDao.query(poDto);
		//根据List集合中的对象的PID进行去重 list即为去重后的结果集
		List<PoOrder> list=poOrders.stream().filter(distinctByKey((po) -> (po.getId()))).collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值