排列组合运算,大家都不陌生吧:如果有3个集合来作排列组合运算,每个集合的元素个数分别为n1、n2、n3,则结果集的元素个数为n1 * n2 * n3。

我的实现思路是:

1)遍历每个集合

2)如果是第1次遍历,则直接把元素放入结果集中;反之,则把上次的结果集缓存一份,然后给缓存合集中的每个元素作后续拼接。代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;public class MyCollectionUtils {/*** 对集合作排列组合运算** @param list       要运算的集合* @param mapper     每个元素转成String的规则* @param connectors 每个元素在结果集中的连接符号* @param <T>* @return*/public static <T> List<String> combine(List<List<T>> list, Function<T, String> mapper, String connectors) {if (list == null || list.isEmpty()) {return new ArrayList<>();}//结果集List<String> resList = new ArrayList<>();//缓存上次的结果集,用来拼接新的元素List<String> cacheList = null;for (int i = 0; i < list.size(); i++) {if (i == 0) {resList.addAll(list.get(i).stream().map(mapper).collect(Collectors.toList()));} else {cacheList = new ArrayList<>(resList);List<T> ts = list.get(i);for (int j = 0; j < ts.size(); j++) {T t = ts.get(j);if (j == 0) {resList = resList.stream().map(e -> e + connectors + mapper.apply(t)).collect(Collectors.toList());} else {resList.addAll(cacheList.stream().map(e -> e + connectors + mapper.apply(t)).collect(Collectors.toList()));}}}}return resList;}public static void main(String[] args) {List list = new ArrayList();List list1 = new ArrayList();list1.add(1);list1.add(2);list1.add(3);List list2 = new ArrayList();list2.add(4);list2.add(5);List list3 = new ArrayList();list3.add(6);list3.add(7);list3.add(8);list.add(list1);list.add(list2);list.add(list3);List<String> combine = combine(list, (e -> e.toString()), ",");for (String str : combine) {System.out.println(str);}}
}

程序输出:

1,4,6
2,4,6
3,4,6
1,5,6
2,5,6
3,5,6
1,4,7
2,4,7
3,4,7
1,5,7
2,5,7
3,5,7
1,4,8
2,4,8
3,4,8
1,5,8
2,5,8
3,5,8

明显符合预期,over~

java实现排列组合运算相关推荐

  1. java 字符串排列组合_Java 程序计算列出字符串的所有排列组合

    Java 程序计算列出字符串的所有排列组合 在此示例中,我们将学习计算Java中字符串的所有排列组合. 要理解此示例,您应该了解以下Java编程主题: 字符串的排列是指可以通过互换字符串字符的位置来形 ...

  2. java数组排列组合_java算法题--递归求数组中数字排列组合问题

    java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...

  3. java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...

  4. 算法笔记—02:Java实现排列组合

    排列的计算公式: 组合的计算公式 根据上面公式可知,所以求排列组合可以采用求阶乘的方法实现: 阶乘的实现: /*** 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 */pri ...

  5. java实现排列组合算法

    组合算法 网上已经能够搜索到比较多的资料,大部分都是递归实现,因为递归实现是最优解,而且代码易于理解,递归实现可以参考这篇博客​​​​​​​:组合算法Java实现_freedom__bird的博客-C ...

  6. java字符串排列组合算法

    前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事Java开发的工作,和多数人一样,最开始从事crud的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态. ...

  7. 数列的组合及排列方式java_java数组排列组合

    ⑥ 对于正面考虑太复杂的问题,可以考虑反面. ⑦ 对于一些排列数与组合数的问题,需要构造模型. 典例分析排列数组合数的简单计算 [例1] 对于满足 n ≥ 13 的正...... Java 实现排列组 ...

  8. java dfs_Java数据结构与算法 深搜(DFS)的简单使用(一)之排列组合

    今天,我们来简单介绍一下深度优先搜索(DFS)的概念和使用. 在百度词条中,对深搜的解释是这样的. 百度词条中的解释 由此,我们可知,深搜是广泛运用到 图 中的搜索方法之一. 用深度优先搜索遍历图的基 ...

  9. 合理抽象灵活运用排列组合(洛谷P2181题题解,Java语言描述)

    题目要求 P2181题目链接 分析 其实,本题是一个数学题... 首先由题意得,不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线. 而这两条对角线实质上是确定了4个顶点(也可以看做是一个 ...

  10. java打印结果横向排列_Java8排列组合(6行代码实现)

    记得有一次想起一个四个字的昵称,于是在一张纸上写下所有喜欢的字,看看字之间的排列组合能不能组成比较好的昵称ヾ§  ̄▽)ゞ2333333, 当时刚学编程,所以也在想怎么用代码实现多个字排列组合出所有的四 ...

最新文章

  1. How Tomcat Works(十一)
  2. LeetCode 24 Swap Nodes in Pairs(交换序列中的结点)
  3. c语言单链表_C语言笔试题—单链表逆序
  4. Apache发布TomEE 7.1,支持Java 8和MicroProfile 1.2
  5. Py之prettytable:prettytable的简介、安装、使用方法之详细攻略
  6. HDU6322 Problem D. Euler Function【欧拉函数+数学规律】
  7. 运动目标跟踪(二)--搜索算法预测模型之粒子滤波
  8. 读完 Effective Java,我整理这 59 条技巧!
  9. 接口测试之发包工具介绍
  10. 硬件WAF的制作!linux系统制作硬件WAF,实现透明代理,具备断电、故障Bypass功能。...
  11. 勉强算是面经——1.诺瓦科技
  12. win10桌面右键一直转圈_不多占1M内存的win10桌面美化
  13. win7计算机相机,笔记本win7怎么拍照_win7电脑照相机如何打开
  14. NUCLE0 STM32L476RGT6开发板的资料整理
  15. 肯德基 服务器响应异常,肯德基链接服务器异常
  16. kubernetes云原生纪元:共享存储-PVPVC(上)
  17. ISO认证体系有哪些
  18. 调试ASP程序时,遇到程序运行错误时怎么查看具体错误位置呢?
  19. python统计元音字母个数_计算Python中的元音(Counting vowels in python)
  20. 提升用户体验 联想企业网盘从速度、数据管理、业务协同三方面入手

热门文章

  1. 四川眉山中院宣判两起特大跨国电信诈骗案
  2. mac部署rabbitmq流程与异常总结
  3. python如何进行双色球抽奖_Python趣味实例,实现一个简单的抽奖刮刮卡
  4. PHP 垃圾回收机制
  5. 多个域名指向一个ip
  6. IPFS独角兽西部世界解读:销毁的近2000万FIL去哪里了?
  7. 信息学奥赛一本通 1296:开餐馆(evd)
  8. cadence SPB17.4 - allegro DRC - Physical - Maximum Neck Length
  9. 关于jmeter运行提示没有权限 报错
  10. 百分比换算十六进制透明度