Java 流式编程,交流~

2019-09-03 19:55:08 +08:00
 Jhonson

我看 java 有很多人也会用stream来简化一些操作,我想问一下以下场景的一些案例,大家可以 share 一下实现方式吗?

int[] arr = {3,4,5,6,3,2,3};
//统计出每个数字的个数 返回一个 map
{3:3,4:1,2:1,5:1,6:1}

//统计下标索引 存放在 list 里面
{3:[0,5,7],4:[1],5:[2],2:[6]}}}

暂时能想到的是这些,如果大家日常有使用流式写法的,可以 share 一下你的秘籍呀~

3043 次点击
所在节点    Java
3 条回复
857681664
2019-09-03 21:11:57 +08:00
1. stream().collect(Collectors.groupingBy))
2. 暂时没想到一部到位的写法,等大佬来解答
Todd_Leo
2019-09-03 22:39:31 +08:00
Scala 混进来乱答一发

1. `List(3,4,5,6,3,2,3).groupBy(identity).mapValues(_.size)`

2.

```
List(3,4,5,6,3,2,3).zipWithIndex.foldLeft(Map[Int, List[Int]]()) { case (grouped, (k, i)) =>
grouped + (k -> (grouped.getOrElse(k, List[Int]()) :+ i))
}
```
zhady009
2019-09-04 00:05:09 +08:00
第二题的
Map<Integer, List<Integer>> collect = IntStream.range(0, arr.length)
.boxed()
.collect(Collectors.groupingBy(x -> arr[x], Collectors.toList()));

另外楼主示例里下标弄错了一开始还以为我写错了..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX