求教!关于List类型数据的排列组合

xiaobinsz 2018-08-14 04:04:26
例如数据为[[1, 2, 3, 4], [A, B, C, D]] ,需要组合出来[1,A]、[1、B]......这种排列,List的长度是不定的,这种要如何生成动态的排列结果,之前想过用递归来做,但没写出来==
...全文
375 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2018-08-16
  • 打赏
  • 举报
回复
不需要递归,给你一点提示,首先尝试编写如下函数
伪代码如下:
List<string> Combo(List<string> list1, List<string> list2)
{
List<string> result = new List<string>();
for (string s: list1)
for (string item: list2)
result.add(item + "," + s);
return result;
}
那么假如有list1 list2 list3 list4
组合的代码就是
List<List<string>> list = new List<List<string>>();
list.add(list2);
list.add(list3);
list.add(list4);

result = list1;
for (List<string> item : list)
result = Combo(result, item);
xiaobinsz 2018-08-15
  • 打赏
  • 举报
回复
这种效果是在数据已知的情况下,我的问题就是因为不确定会有多少个数据才比较难搞的
松鼠不是鼠 2018-08-15
  • 打赏
  • 举报
回复
private static  List demo(String[] number, String[] letter){
Arrays.sort(number);
Arrays.sort(letter);
List<String[]> list=new ArrayList();
String[] longArray;
String[] shortArray;
if(number.length>letter.length){
longArray=number;
shortArray=letter;
}else{
longArray=letter;
shortArray=number;
}
for (int i=0;i<shortArray.length;i++
) {
String[] array=new String[2];
array[0]=number[i];
array[1]=letter[i];
list.add(array);
}
return list;
}

public static void main(String[] args) {
String[] number = {"1", "3", "2","5","4"};
String[] letter = {"A", "D", "B", "C", "E","H","G"};
List<String[]> list=demo(number,letter);
System.out.println();
}


应该还有更好的办法,我这样的办法对数组有点限制,不知道是不是你想要的,应该有所出入
松鼠不是鼠 2018-08-15
  • 打赏
  • 举报
回复
引用 4 楼 u013845168 的回复:
private static  List demo(String[] number, String[] letter){
Arrays.sort(number);
Arrays.sort(letter);
List<String[]> list=new ArrayList();
String[] longArray;
String[] shortArray;
if(number.length>letter.length){
longArray=number;
shortArray=letter;
}else{
longArray=letter;
shortArray=number;
}
for (int i=0;i<shortArray.length;i++
) {
String[] array=new String[2];
array[0]=number[i];
array[1]=letter[i];
list.add(array);
}
return list;
}

public static void main(String[] args) {
String[] number = {"1", "3", "2","5","4"};
String[] letter = {"A", "D", "B", "C", "E","H","G"};
List<String[]> list=demo(number,letter);
System.out.println();
}


应该还有更好的办法,我这样的办法对数组有点限制,不知道是不是你想要的,应该有所出入

不好意思看错了,你说的是list<list<>>,你把里面的String[]改一下试试
Super_King_ 2018-08-14
  • 打赏
  • 举报
回复
不知道你要的是不是这种效果,希望能帮到你
public class TestArrayList {

public static void main(String[] args) {

String[] number = {"1", "2", "3", "4", "5"};

String[] letter = {"A", "B", "C", "D", "E"};

for (int i = 0; i < number.length; i++) {
String str = number[i] + "," + letter[i];
System.out.println(str);
}
}
}
xiaobinsz 2018-08-14
  • 打赏
  • 举报
回复
重新写了一下,实现了

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

public class Main {
//对排列结果进行存贮的list
static List range_List = new ArrayList();

public static void main(String[] args) {
List list1 = new ArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
List list2 = new ArrayList();
list2.add("A");
list2.add("B");
list2.add("C");
list2.add("D");
List list3 = new ArrayList();
list3.add("A");
list3.add("B");
list3.add("C");
list3.add("D");

List list = new ArrayList();
list.add(list1);
list.add(list2);
list.add(list3);

Main main = new Main();
List listlll = new ArrayList();
main.range(list, listlll);
System.out.println(range_List);
}

/**
* @param list_range 需要排列的数组
* @param list_trans 排列后的结果
*/

void range(List list_range, List list_trans) {
//获得当前要排列的list的长度
int size = list_range.size();
//循环到最后一次
if (size == 1) {
//将排列结果汇总
for (Object object : (List) list_range.get(0)) {
List l_list = new ArrayList();
l_list.addAll(list_trans);
l_list.add(object);
//将此结果汇总
range_List.add(l_list);
}
} else {
//没有循环到底
//给存排列结果的list添加排列
List loopList = (List) list_range.get(0);
List list_loop = new ArrayList();
list_loop.addAll(list_range);
list_loop.remove(0);
for (Object object : loopList) {
//将其添加到存排列结果的list中
List list_d = new ArrayList();
list_d.addAll(list_trans);
list_d.add(object);
//递归
range(list_loop, list_d);
}
}


}
}
源码链接: https://pan.quark.cn/s/8ddf8a1c92f9 **libcurl用于获取大型文件**libcurl作为一个开源的C语言库,提供了一系列的API来处理与URL相关的任务,涵盖了HTTP、FTP、SMTP等多种网络协议的应用。在执行大型文件的下载操作时,libcurl展现出卓越的性能表现和高度的灵活性,能够高效地管理大文件传输过程,有效预防内存溢出及其他潜在问题。**libcurl的基础操作**libcurl的基础应用包括以下几个环节:1. **初始化**:需要借助`curl_global_init()`函数来启动libcurl的工作环境。2. **建立会话句柄**:通过`curl_easy_init()`函数创建一个会话句柄,该句柄将用于后续所有的操作流程。3. **配置选项**:运用`curl_easy_setopt()`函数来设定多种参数,例如目标URL、超时时间、重试次数以及数据写入的回调函数等。4. **执行请求**:调用`curl_easy_perform()`函数来实施下载操作。5. **释放资源**:使用`curl_easy_cleanup()`函数来释放已经占用的资源。**获取大型文件时的重要设置**1. **数据写入回调函数**:在处理大型文件下载时,通常不希望一次性将整个文件载入内存。可以配置`CURLOPT_WRITEFUNCTION`选项,指定一个回调函数来处理接收到的数据片段,这样libcurl在接收到数据时会调用该函数,使得我们可以按需将数据写入文件或缓冲区。2. **缓冲策略**:可以设定缓冲区的大小(比如,通过`CURLOPT_BUFFERSIZE`),来控制每次接收数据的数量,从而优化内存...
内容概要:本文档整合了《鬼谷子·决篇》与《三略·审权变第三》《差德行第四》三大古代智慧典籍,构建了一套“决策+形势+用人”三位一体的领导力提升体系。通过28天三合实战路径、三维诊断工具、9个实用模板及独特的“身体锚点”仪式,系统解决管理者在决策犹豫、形势误判、人岗错配等方面的痛点。全文涵盖理论溯源、方法论拆解(如三步决策法、审权变四步法、差德行四步法)、历史案例对照(范蠡 vs 项羽)以及跨资源联动建议,形成从认知到实践的完整闭环。; 适合人群:中基层管理者、创业者、职场进阶者,尤其是面临决策困境、环境适应困难或团队用人问题的人群;具备一定管理经验或自我提升意识的个体亦可受益。; 使用场景及目标:① 提升重大事项的决策质量,避免反复纠结与事后后悔;② 增强对外部环境变化的敏感度与应对能力,实现灵活调整;③ 科学评估人才德才素质,实现人岗精准匹配,减少用人失误;④ 构建个人化的决策-应变-用人标准化流程(SOP)。; 阅读建议:建议按照28天路径逐步实践,结合自测表定位短板,优先突破薄弱模块;配套工具模板需实际填写使用,配合身体锚点仪式强化行为记忆;可与“诸葛亮决策术”“立将威信术”等单品联动,全面提升领导力体系。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧