经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java8自定义条件让集合分组
来源:cnblogs  作者:飞叶子  时间:2018/11/6 12:30:54  对本文有异议
  1. /**
  2. * 将一个指定类型对象的集合按照自定义的一个操作分组; 每组对应一个List、最终返回结果类型是:List<List<T>>
  3. *
  4. * @param <T>
  5. */
  6. static class GroupToList<T> implements Collector<T, List<List<T>>, List<List<T>>> {
  7. /**
  8. * 集合中对象两两比较,满足自定义的条件(operation结果返回true),便将这两个元素分为一组
  9. */
  10. private BiFunction<T, T, Boolean> operation;
  11. public GroupToList(BiFunction<T, T, Boolean> operation) {
  12. super();
  13. this.operation = operation;
  14. }
  15. @Override
  16. public BiConsumer<List<List<T>>, T> accumulator() {
  17. return (c, t) -> {
  18. boolean added = false;
  19. for (List<T> cc : c) {
  20. for (T ccc : cc) {
  21. if (operation.apply(ccc, t)){
  22. cc.add(t);
  23. added = true;
  24. }
  25. break;
  26. }
  27. if (added)
  28. break;
  29. continue;
  30. }
  31. if (!added) {
  32. ArrayList<T> list = new ArrayList<T>();
  33. list.add(t);
  34. c.add(list);
  35. }
  36. };
  37. }
  38. @Override
  39. public Set<java.util.stream.Collector.Characteristics> characteristics() {
  40. /*
  41. Set<java.util.stream.Collector.Characteristics> emptySet = Collections.emptySet();
  42. */
  43. return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));
  44. }
  45. @Override
  46. public BinaryOperator<List<List<T>>> combiner() {
  47. return (l1,l2) -> {l2.addAll(l1); return l2;};
  48. }
  49. @Override
  50. public Function<List<List<T>>, List<List<T>>> finisher() {
  51. return p -> p;
  52. }
  53. @Override
  54. public Supplier<List<List<T>>> supplier() {
  55. return () -> new ArrayList<List<T>>();
  56. }
  57. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号