You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
        }
    }
}

关键改动说明

  1. 新增元素索引统计Map:elementIndexesMap会把每个元素和它所有出现的索引对应起来,比如AB1012对应的索引列表是[1,2],这样我们就能快速找到它的重复项位置。
  2. 判断逻辑调整:遍历的时候,先检查当前索引是不是该元素的第一个出现位置,并且该元素有重复项。如果是,就把第一个重复项的完整标识(比如AB1012_G1)赋值给replicate;否则replicate保持为空。
  3. 输出结果匹配需求:运行这段代码后,输出就会和你期望的完全一致啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:14:34