You need to enable JavaScript to run this app. Java如何生成List集合中元素的有序排列组合
优惠活动
大模型
产品
解决方案
定价
更多

Java如何生成List集合中元素的有序排列组合

实现方案

你需要的是列表元素的有序二元排列(即选取两个不同元素按顺序拼接),以下是兼容任意元素数量的通用实现:

基础嵌套循环实现(兼容所有Java版本)

逻辑直观,性能最优:

import java.util.ArrayList;
import java.util.List;

public class OrderedPairGenerator {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("MP");
        list.add("Maharastra");
        list.add("Karnataka");
        
        List<String> permutationResult = generateOrderedPairs(list);
        // 输出结果和预期完全一致
        System.out.println(permutationResult);
    }

    public static List<String> generateOrderedPairs(List<String> inputList) {
        List<String> result = new ArrayList<>();
        int elementCount = inputList.size();
        // 元素不足2个时无符合要求的排列,直接返回空
        if (elementCount < 2) {
            return result;
        }
        for (int firstIndex = 0; firstIndex < elementCount; firstIndex++) {
            String firstElement = inputList.get(firstIndex);
            for (int secondIndex = 0; secondIndex < elementCount; secondIndex++) {
                // 跳过同一个元素的组合
                if (firstIndex == secondIndex) {
                    continue;
                }
                result.add(firstElement + ":" + inputList.get(secondIndex));
            }
        }
        return result;
    }
}

Java 8+ 流式实现

代码更简洁:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class StreamOrderedPairGenerator {
    public static List<String> generateOrderedPairs(List<String> inputList) {
        return IntStream.range(0, inputList.size())
                .boxed()
                .flatMap(firstIndex -> IntStream.range(0, inputList.size())
                        .filter(secondIndex -> firstIndex != secondIndex)
                        .mapToObj(secondIndex -> inputList.get(firstIndex) + ":" + inputList.get(secondIndex)))
                .collect(Collectors.toList());
    }
}

验证说明

针对3个元素的测试用例,两种实现的输出均为:
[MP:Maharastra, MP:Karnataka, Maharastra:MP, Maharastra:Karnataka, Karnataka:MP, Karnataka:Maharastra]
完全匹配预期。当输入列表有n个元素时,会自动生成n*(n-1)个排列结果,支持任意长度的输入。

内容的提问来源于stack exchange,提问作者marklogic_coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:30:03