Java 8实现:从Answer列表筛选code在DataBean的answerCode列中的元素
解决方案
这问题我熟,给你两种实用的实现方式,看你项目用的Java版本选就行:
方式一:Java 8+ 流式处理(推荐)
这种写法简洁高效,利用Java Stream API来过滤。先把DataBean里的所有answerCode提取到一个Set里(Set的contains方法比List快很多,数据量大的时候优势明显),再过滤Answer列表:
// 先提取所有DataBean的answerCode到Set中 Set<Integer> answerCodes = dataBeanList.stream() .map(DataBean::getAnswerCode) .collect(Collectors.toSet()); // 过滤Answer列表,保留code在answerCodes中的对象 List<Answer> filteredAnswers = answerList.stream() .filter(answer -> answerCodes.contains(answer.getCode())) .collect(Collectors.toList());
方式二:传统循环实现(兼容低版本Java)
如果你的项目还在用Java 8之前的版本,用普通循环也能搞定,逻辑是一样的:
Set<Integer> answerCodes = new HashSet<>(); // 先收集所有answerCode for (DataBean dataBean : dataBeanList) { answerCodes.add(dataBean.getAnswerCode()); } List<Answer> filteredAnswers = new ArrayList<>(); // 遍历Answer列表筛选 for (Answer answer : answerList) { if (answerCodes.contains(answer.getCode())) { filteredAnswers.add(answer); } }
小提示
为啥用HashSet而不是直接用List存answerCode?因为List.contains()是逐个遍历查找,时间复杂度是O(n),而HashSet.contains()是哈希查找,时间复杂度O(1),当你的数据量比较大的时候,性能差距会很明显。
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

