java 从list找出数据_Java 两个 List

这篇博客介绍了一种使用Java从两个List>中找出数据差异的方法。通过创建DataSelector和SelectCollectorImpl类,实现了比较两个列表中基于特定参数的数据,并分别收集相同和不同数据的逻辑。提供了三种不同实现方案,每种方案都包含查找共同项和差异项的逻辑,以满足特定需求。" 83581404,7437370,DLIB库3D点云学习:3d_point_cloud_ex.cpp实战解析,"['DLIB', '3D图形', '示例代码', '图像处理', '计算机视觉']
摘要由CSDN通过智能技术生成

究极无敌最终版!!!

方案1版本代码(mapB2在diff中返回两次):

@NoArgsConstructor(access = AccessLevel.PRIVATE)

public class DataSelector {

private List> mainList;

private List> subList;

private List paramNames;

public static DataSelector init(List paramNames) {

DataSelector dataSelector = new DataSelector();

dataSelector.paramNames = paramNames;

return dataSelector;

}

public DataSelector addMain(List> mainList) {

this.mainList = mainList;

return this;

}

public DataSelector addSub(List> subList) {

this.subList = subList;

return this;

}

public Result select() {

Result result = new Result();

SelectCollectorImpl.Result mainResult = this.mainList.stream().collect(new SelectCollectorImpl(this.paramNames));

Set valueSet = mainResult.getValueSet();

for (Map map : this.subList) {

SelectCollectorImpl.Result subResult = SelectCollectorImpl.Result.init(map, this.paramNames);

if (valueSet.contains(subResult.getFirstValue())) {

result.addSame(map);

}else {

List> relatedMapList = mainResult.getRelatedMapList();

for (Map relatedMap : relatedMapList) {

List diffParamNames = this.paramNames.stream().filter(paramName -> !map.get(paramName).equals(relatedMap.get(paramName))).collect(Collectors.toList());

if (diffParamNames.size() != this.paramNames.size()) {

result.addDiff(map, diffParamNames);

}

}

}

}

return result;

}

@Getter

@Setter(value = AccessLevel.PRIVATE)

@NoArgsConstructor(access = AccessLevel.PRIVATE)

@ToString

static class Result {

private List> sameList = new ArrayList<>();

private List diffList = new ArrayList<>();

public Result addSame(Map map) {

this.sameList.add(map);

return this;

}

public Result addDiff(Map data, List paramNames) {

Diff diff = new Diff(data, paramNames);

this.diffList.add(diff);

return this;

}

@Getter

@Setter(value = AccessLevel.PRIVATE)

@AllArgsConstructor(access = AccessLevel.PRIVATE)

@ToString

static class Diff {

private Map data;

private List paramNames;

}

}

}

@AllArgsConstructor

public class SelectCollectorImpl implements Collector, SelectCollectorImpl.Result, SelectCollectorImpl.Result> {

private List keys;

@Override

public Supplier supplier() {

return Result::new;

}

@Override

public BiConsumer> accumulator() {

return (result, map) -> result.addValue(map, this.keys);

}

@Override

public BinaryOperator combiner() {

return Result::merge;

}

@Override

public Function finisher() {

return Function.identity();

}

@Override

public Set characteristics() {

return Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));

}

@Getter

@Setter(value = AccessLevel.PRIVATE)

static class Result {

private Set valueSet = new HashSet<>();

private List> relatedMapList = new ArrayList<>();

public String getFirstValue() {

return this.valueSet.strea

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值