V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jhonson
V2EX  ›  Java

Java 流式编程,交流~

  •  
  •   Jhonson ·
    ileadall42 · 2019-09-03 19:55:08 +08:00 · 2958 次点击
    这是一个创建于 1694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看 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 一下你的秘籍呀~

    857681664
        1
    857681664  
       2019-09-03 21:11:57 +08:00
    1. stream().collect(Collectors.groupingBy))
    2. 暂时没想到一部到位的写法,等大佬来解答
    Todd_Leo
        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
        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()));

    另外楼主示例里下标弄错了一开始还以为我写错了..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1236 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:27 · PVG 07:27 · LAX 16:27 · JFK 19:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.