当前位置: 首页 > news >正文

数据排列组合实现

示例

将以下几组数据 (“01”, “02”),(“A1”, “A2”, “A3”),(“B1”, “B2”),(“D1”, “D3”)排列组合成,如:01:A1:B1:D1 样例数据。

实现

package com.angel.ocean.utils;import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;@Slf4j
public class CombinationUtil {// 连接符public static String COMMA = ":";/*** 获取元素组合* @param lists* @param index* @return*/public static List<String> getAllCombination(List<List<String>> lists, Integer index) {if(null == index) {index = 0;}List<String> result = new ArrayList<>();generateCombinations(lists, index, new ArrayList<>(), data -> {// 这里处理每个生成的组合result.add(listToString(data));});return result;}/*** list转字符串* @param list* @return*/private static String listToString(List<String> list) {StringBuilder stringBuilder = new StringBuilder();for (String data : list) {stringBuilder.append(data);stringBuilder.append(COMMA);}if(stringBuilder.length() > 0) {stringBuilder.setLength(stringBuilder.length() - 1);}return stringBuilder.toString();}/*** 元素组合* @param lists* @param index* @param current* @param action*/public static void generateCombinations(List<List<String>> lists, int index, List<String> current, Consumer<List<String>> action) {if (index == lists.size()) {// 所有列表都已遍历完毕,处理当前组合action.accept(new ArrayList<>(current));return;}List<String> sublist = lists.get(index);for (String item : sublist) {current.add(item); // 添加当前项到组合中generateCombinations(lists, index + 1, current, action); // 递归处理下一个列表current.remove(current.size() - 1); // 回溯,移除最后添加的项以尝试其他组合}}// Java 8 引入的函数式接口,用于处理生成的组合@FunctionalInterfaceinterface Consumer<T> {void accept(T t);}
}

验证

public static void main(String[] args) {List<List<String>> lists = Arrays.asList(Arrays.asList("01", "02"),Arrays.asList("A1", "A2", "A3"),Arrays.asList("B1", "B2"),Arrays.asList("D1", "D3"));List<String> list = getAllCombination(lists, 0);for (String data : list) {log.info("{}", data);}
}

运行截图:

在这里插入图片描述


http://www.mrgr.cn/news/47139.html

相关文章:

  • python 3个线程轮流打印A、B、C
  • 《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题
  • Nginx反向代理请求头有下划线_导致丢失问题处理
  • centos9设置静态ip
  • Debye-Einstein-模型拟合比热容Python脚本
  • 在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器
  • CentOS系统解压缩.7z后缀的文件
  • jenkins中的allure和email问题梳理
  • java通知提醒实现使用`java.util.Timer`或`ScheduledExecutorService`进行定时提醒
  • Unicode
  • 12.JVM类加载机制
  • 2024年诺贝尔物理学奖2
  • 怎么高效对接SaaS平台数据?
  • ITSS-IT服务工程师和ITSS-IT服务经理的区别
  • GEE 错误:Can‘t transform (11121.0,18905.0),Can‘t transform (-1.0,-1.0)
  • C#中ref关键字和out关键字
  • LeetCode 2831.找出最长等值子数组(cpp, python3)
  • 深入理解 Vue.js 事件修饰符与事件冒泡:实战指南20241010
  • 基于RAMS的台风苏拉(Saola)模拟预报深入分析引言
  • tcl/perl 脚本命令学习
  • Python库pandas之五
  • 复古胶片风格人文扫街摄影后期Lr调色,手机滤镜PS+Lightroom预设下载!
  • 自动驾驶系统研发系列—全智能驾驶新高度:深入解析车道保持辅助(ELK)功能
  • ComfyUI 使用 LoRA 极简工作流
  • 关于摩托车一键启动无钥匙进入、智能科技创新
  • 2024年危化品经营单位(生产管理人员)考试题库及答案