Java代码改造:为原始重复条目关联显示对应重复值
Java代码改造:为原始重复条目关联显示对应重复值
我明白你的需求啦——你希望让第一次出现的重复条目,在第二列显示出它对应的重复项的完整标识,而重复项本身的第二列保持为空,对吧?咱们来一步步改造代码:
核心思路调整
原来的代码只是记录了重复项的索引,现在我们需要先统计每个元素所有出现的位置,这样就能知道某个元素第一次出现后,后面还有哪些重复的条目,然后把这些重复条目的标识填到第一次出现的条目第二列里。
改造后的完整代码
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DuplicateTesting { public static void main(String[] args) { List<String> fileContents = new ArrayList<String>(); fileContents.add("AB1011"); fileContents.add("AB1012"); fileContents.add("AB1012"); fileContents.add("AB1013"); fileContents.add("AB1014"); fileContents.add("AB1015"); fileContents.add("AB1015"); String[] sample_letter = { "A1", "E2", "G1", "C3", "B1", "F2", "H1", "D3", "C1", "G2", "A2", "E3", "D1", "H2", "B2", "F3", "E1", "A3", "C2", "G3", "F1", "B3", "D2", "H3", "A4", "E5", "G4", "C6", "B4", "F5", "H4", "D6", "C4", "G5", "A5", "E6", "D4", "H5", "B5", "F6", "E4", "A6", "C5", "G6", "F4", "B6", "D5", "H6", "A7", "E8", "G7", "C9", "B7", "F8", "H7", "D9", "C7", "G8", "A8", "E9", "D7", "H8", "B8", "F9", "E7", "A9", "C8", "G9", "F7", "B9", "D8", "H9", "A10", "E11", "G10", "C12", "B10", "F11", "H10", "D12", "C10", "G11", "A11", "E12", "D10", "H11", "B11", "F12", "E10", "A12", "C11", "G12", "F10", "B12", "D11", "H12" }; List<String[]> rows = new ArrayList<String[]>(); // 用Map存储每个元素对应的所有出现索引 Map<String, List<Integer>> elementIndexesMap = new HashMap<>(); // 第一步:先统计每个元素的所有出现位置 for (int i = 0; i < fileContents.size(); i++) { String element = fileContents.get(i); elementIndexesMap.computeIfAbsent(element, k -> new ArrayList<>()).add(i); } // 第二步:遍历每个元素,生成rowInfo for (int i = 0; i < fileContents.size(); i++) { String currentElement = fileContents.get(i); List<Integer> indexes = elementIndexesMap.get(currentElement); String replicate = ""; // 如果当前是该元素的第一个出现位置,且存在后续重复项 if (indexes.get(0) == i && indexes.size() > 1) { // 取第一个重复项的标识(如果有多个重复可以拼接,这里按你的示例取第一个) int duplicateIndex = indexes.get(1); replicate = fileContents.get(duplicateIndex) + "_" + sample_letter[duplicateIndex]; } String[] rowInfo = { currentElement + "_" + sample_letter[i], replicate, sample_letter[i] }; System.out.println("Adding: " + rowInfo[0] + " | " + rowInfo[1] + " | " + rowInfo[2]); rows.add(rowInfo); } } }
关键改动说明
- 新增元素索引统计Map:
elementIndexesMap会把每个元素和它所有出现的索引对应起来,比如AB1012对应的索引列表是[1,2],这样我们就能快速找到它的重复项位置。 - 判断逻辑调整:遍历的时候,先检查当前索引是不是该元素的第一个出现位置,并且该元素有重复项。如果是,就把第一个重复项的完整标识(比如
AB1012_G1)赋值给replicate;否则replicate保持为空。 - 输出结果匹配需求:运行这段代码后,输出就会和你期望的完全一致啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

