Java 数组分组算法实现

本贴最后更新于 2746 天前,其中的信息可能已经时移俗易

需求:对一个数组按顺序进行分组

起因:
今天领导突然来了个需求,需要发送 2000 多条短信,但是第三方接口只能一次调用 200 条短信,情况紧急,但是我又不想一个个的弄,于是想能不能分组进行发送,在百度上搜了半天,看到的方法也很多,
但也很复杂,终于决定还是自己写一个吧 😥
实现过程:

首先设定两个变量
1.需要分组的数组 String[] elements
2.每个组的元素的数量 int gc
这样就可以计算总共的组数 count = elements.length/gc
count 有两种情况
一种能被整除为 count
不能被整除为 count+1

代码:

private static List<String[]> groupBySequence(int gc, String[] elements){ List<String[]> list = new ArrayList<>(); int count = elements.length/gc; int mod = elements.length%gc; if (mod != 0) count++; for (int i = 0;i<count;i++){ String[] arr; if (i == (count-1)){ if (mod != 0){ int temp = 0; arr = new String[mod]; for (int j = i*gc; j<(i*gc)+mod;j++){ arr[temp] = elements[j]; temp++; } } else { int temp = 0; arr = new String[gc]; for (int j=i*gc;j<gc*(i+1);j++){ arr[temp] = elements[j]; temp++; } } } else { int temp = 0; arr = new String[gc]; for (int j=i*gc;j<gc*(i+1);j++){ arr[temp] = elements[j]; temp++; } } list.add(arr); } return list; }

调用方法:

public static void main(String[] args) { String[] arrays = {"杨过","小龙女","令狐冲","任盈盈","郭靖","黄蓉","张无忌","赵敏","段誉","王语嫣","鸠摩智"}; int gc = 2; List list = ArraysUtils.groupBySequence(gc, arrays); System.out.println(JSONObject.toJSONString(list));

}

运行结果

[["杨过","小龙女"],["令狐冲","任盈盈"],["郭靖","黄蓉"],["张无忌","赵敏"],["段誉","王语嫣"],["鸠摩智"]]

情况紧急所以写的很随意,过几天再回来优化 ☺️

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖
  • count
    2 引用 • 4 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • washmore 1

    骚年,你或许可以这样做:

    String[] names = new String[]{"zhangsan", "lisi", "wangwu", "zhaoliu", "tianqi", "wangba", "jiuyue", "shiquan"}; List result = Arrays.stream(names).collect(Collectors.groupingBy(x -> Arrays.asList(names).indexOf(x) / 3)).values().stream().collect(Collectors.toList()); System.out.println(result); //out :[[zhangsan, lisi, wangwu], [zhaoliu, tianqi, wangba], [jiuyue, shiquan]]

    当然 对 List 参数也适用:

    List names = new ArrayList() {{ add("zhangsan"); add("lisi"); add("wangwu"); add("zhaoliu"); add("tianqi"); add("wangba"); add("jiuyue"); add("shiquan"); }}; List result =names.stream().collect(Collectors.groupingBy(x -> names.indexOf(x) / 3)).values().stream().collect(Collectors.toList()); System.out.println(result); //out :[[zhangsan, lisi, wangwu], [zhaoliu, tianqi, wangba], [jiuyue, shiquan]]

    当然,骚年你或许还可以尝试下这个小玩意
    非侵入代码的 java 自动分批提交数据组件
    刚好使用你这个场景,暂不支持 String[]数组类型,不过你只需要使用下 Arrays.as() 转换一下成 List 就行了;

    1 回复
  • Vanessa via macOS

    鸠摩智 一个人单着

  • wenandlu

    鸠摩智好可怜

  • yjq14114
    作者

    学习了