我看 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 一下你的秘籍呀~
1
857681664 2019-09-03 21:11:57 +08:00
1. stream().collect(Collectors.groupingBy))
2. 暂时没想到一部到位的写法,等大佬来解答 |
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)) } ``` |
3
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())); 另外楼主示例里下标弄错了一开始还以为我写错了.. |