
针对同一个集合,用 stream 两次得到两个不同条件筛选的集合
List<Object> list1 = list.stream() .filter(x->"a".equals(x.getProp1())) .collect(toList()); List<Object> list2 = list.stream() .filter(x->"b".equals(x.getProp2())) .collect(toList()); 用 for 循环
List<Object> list1 = new ArrayList(); List<Object> list2 = new ArrayList(); for(Object obj : list){ if("a".equals(obj.getProp1())){ list1.add(obj); } if("b".equals(obj.getProp2())){ list2.add(obj); } } 1 freebird1994 2019 年 9 月 3 日 via Android 这没啥纠结的吧。for 循环呀 |
2 015 2019 年 9 月 3 日 via iPhone 我选 stream |
3 maninfog 2019 年 9 月 3 日 via iPhone 复杂度来看 for 要低些? |
4 viakiba 2019 年 9 月 3 日 via Android stream 也可以 foreach 啊 |
5 Inside 2019 年 9 月 3 日 partitionBy、groupBy 了解一下。 函数式的集合操作可以说就跟你写 SQL 差不多,各大语言都有差不多的实现,相当于在语言中集成一定程度的 SQL 来操作集合。 如果你真的懂了这种集合操作风格,换什么语言都是一样的,极少再去用 for 循环了,思维已经完全换掉了。 |
6 chendy 2019 年 9 月 3 日 个人倾向 for |
7 nosilence 2019 年 9 月 3 日 没有百万级别数据,就用 for 千条数据,for 的耗时可能为 0,stream 直接 50ms+起步 |
8 jiyingze 2019 年 9 月 3 日 via iPhone stream,foreach,第一次调用 JVM 有个预热的过程。 预热后和 for 效率都差不多 |
9 SuperMild 2019 年 9 月 3 日 不要考虑效率,等以后有需要再优化。 |
11 wineway 2019 年 9 月 3 日 via iPhone 想保存中间状态用 reduce …… |
12 monsoon 2019 年 9 月 3 日 via Android 虽然我没仔细考虑过。不过你这个可以用 Java 12 的 teeing collector 加两个 Java 9 里的 filtering collector s 做的。 如果不知道怎么做,用类似 fold 之类的方法也都是可以的。 |
13 seeker 2019 年 9 月 3 日 算法复杂度来说是一样的 另外,循环 2 遍,每遍做 1 件事 VS 循环 1 遍,每次做 2 件事又有多少差别呢?楼主测了没 |
14 Rwing 2019 年 9 月 3 日 不会再选择 for 了,写的爽的最重要,而且语义也很明晰,尤其 C#的语法; var list1 = list.Select(x => x.Prop1 == "a"); var list2 = list.Select(x => x.Prop1 == "b"); |
15 yidinghe 2019 年 9 月 4 日 via Android 看你后需要怎么做。如果两个 list 分别用在不同的任务上,那还是趁早把这两个逻辑分开。否则的话,应该有更合理的只需一次 filter 的逻辑。 |
16 1424659514 2019 年 9 月 4 日 groupBy 了解一下 |
17 specita 2019 年 9 月 4 日 同上面,可以用 partitionBy |
18 zclHIT 2019 年 9 月 4 日 stream,先做 partition,再进行 group |