如何处理特定类型集合的操作?

2024-04-23

在我的申请中的几个不同地方,我需要采取Seq[SalesRow]并返回一个Map[String,SalesRow],其中字符串是国家/地区的名称。

我需要在几个地方使用它。例如,我获取所有 SalesRows 的列表,并获取按国家/地区划分的全球销售明细。但在其他地方,我想按月然后按国家/地区细分我的销售额(所以Map[Month,Seq[SalesRow]]变成Map[Month,Map[String,Seq[SalesRow]]]) - 在其他地方,我想按天细分,然后按国家/地区细分。

我的问题是:我应该将需要的(少量)逻辑放在哪里Seq[SalesRow]并将国家地图返回到行?现在,我将其放入伴随对象方法中,SalesRow.byCountry(rows : Seq[SalesReport]。这是最佳的吗?

我想到了一个稍微疯狂的想法,那就是创建一个隐式转换Seq[SalesRow] to EnhancedSalesRowSeq,其中有一个byCountry实例方法。这对我很有吸引力,因为该操作适用于任何 SalesRows 序列。

这是一个好主意吗?

将逻辑添加到伴生对象是我的最佳选择,还是有更好的选择?

Thanks.


如果您不知道该库带有groupBy http://www.scala-lang.org/api/current/scala/collection/TraversableLike.html#groupBy%5BK%5D%28%28A%29%20%E2%87%92%20K%29%3aMap%5BK,%20Repr%5D功能。基本上给出了Seq[SalesRow]它会给你一个Map[T, Seq[SalesRow]]基于函数SalesRow to T.

因此,如果您的功能很简单,您就可以轻松获得地图。我确实喜欢你关于增强序列与将隐含内容结合起来的想法SalesRow伴侣:

case class SalesRow(val month:Int, val country:String, 
  val person:String, val amount:Float)

class EnhancedRow(rows: Seq[SalesRow]) {
  def byCountry: Map[String, Seq[SalesRow]] = 
    rows.groupBy(_.country)
  def byMonth: Map[Int, Seq[SalesRow]] = 
    rows.groupBy(_.month)
  def byCountryByMonth: Map[String, Map[Int, Seq[SalesRow]]] = byCountry.mapValues(r => new EnhancedRow(rows).byMonth)
}

object SalesRow {
  implicit def toEnhanced(rows: Seq[SalesRow]) = new EnhancedRow(rows) 
}

object Test {
  def main(args:Array[String] = null) {
    val seq: Seq[SalesRow] = // ... fill this
    println(seq.byCountry)
    println(seq.byCountryByMonth)
    // same as:
    println(seq.byCountry.mapValues(_.byMonth))
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理特定类型集合的操作? 的相关文章

  • ListenableFuture 到 scala Future

    我正在围绕 java 库编写一个小型 scala 包装器 java 库有一个对象 QueryExecutor 公开了 2 个方法 执行 查询 结果 asyncExecute 查询 ListenableFuture 结果 在这种情况下 Lis
  • 如何将一个窗格连接到另一个窗格

    如何将输出连接到paneWithList PaneWithList其上有一个监听器JList以便将所选行输出到控制台 我怎样才能将该输出定向到JTextPane关于输出 Could PaneWithList触发一个事件Main拿起 会属性更
  • 带尖括号 (<>) 的方法

    方法名称中是否可以有尖括号 例如 class Foo ind1 Int ind2 Int var v new Foo 1 2 v 1 3 updates ind1 v lt 1 gt 4 updates ind2 真实情况显然比这更复杂 我
  • Spark:如何从spark shell运行spark文件

    我正在使用CDH 5 2 我能够使用火花外壳运行命令 如何运行包含 Spark 命令的文件 file spark 有没有办法在没有 sbt 的情况下在 CDH 5 2 中运行 编译 scala 程序 在命令行中 您可以使用 spark sh
  • Twitter API 与 Scala 2.12 一起使用

    我正在使用 Scala 2 12 使用 SBT 构建 构建 Spark 3 0 0 流应用程序 鉴于所有用于执行此操作的库均适用于 Scala EDIT 我尝试使用库构建时得到的示例输出 object twitter is not a me
  • 无法向 kafka 主题发送消息

    我正在使用 Kafka Play 以及 Scala 这是我的代码 我想在其中发送消息到kafka服务器 主题名称是 测试主题 尽管我没有在主题中看到我发送的消息 但我没有收到任何错误 这里有什么问题吗 import kafka produc
  • for-yield-getOrElse 是 Scala 的范例还是有更好的方法?

    基本上我想提取一堆选项 a b 等 这是在 Scala 中执行此操作的最佳方法吗 对于我来说 括号中的 for yield 看起来有点令人困惑 for a lt a b lt b c lt c yield getOrElse 尝试使用map
  • 不在对象上下文中时使用 $this php

    我刚刚开始学习 php 中的 OOPS 我写了一个简单的程序来实现继承 当不在对象上下文中时 我收到 this 的致命错误 谁能解释一下这个错误 它是什么意思 这是我的代码
  • Scala 中两个地图的交集和合并/连接

    假设我有两张类似这样的地图 val m1 Map 1 gt One 2 gt Two 3 gt Three val m2 Map 2 gt 2 0 3 gt 3 0 4 gt 4 0 我想根据键获取交集并返回一个表示合并值的元组 结果看起来
  • Python Tkinter OOP 布局配置

    我正在尝试使用 tkinter 构建一个应用程序 该布局在没有 OO 原则的情况下工作 但我很难理解应该如何将其转移到 OO The layout is as shown in the pic below 1280x720px 我有以下内容
  • Java中的引用变量到底是什么?它与其他变量有何不同?

    我一直在研究 Java 中的继承 作者声明 被引用的对象类型 而不是引用变量的类型 决定了将执行哪个版本的重写方法 这种说法非常令人困惑 这本书所指的是多态性 更具体地通过动态调度 简而言之 想象一下以下类 public class Per
  • 为什么c++中的构造函数不能声明为静态?

    我最近读完了第一卷 Bruce Eckel 的 Thinking in C 现在转向将这些知识应用到一些实际用途中 我最近正在使用静态成员函数 并尝试将构造函数设为静态 但编译器对此不满意 我查了书上的原因 但没有找到 谁能解释为什么 P
  • 如何让枚举存储每个条目的额外信息

    我有一组包含相关信息的项目 这些项目是由我 程序员 定义的 用户不需要更改它们 它们永远不需要根据配置进行更改 并且它们唯一可能更改的时间是在我的应用程序的未来版本中 我事先知道这些项目应该有多少 以及它们的确切数据是什么 枚举是一种很棒的
  • Scala 对大数的阶乘有时会崩溃,有时不会

    以下程序经过编译和测试 有时返回结果 有时充满屏幕 java lang StackOverflowError at scala BigInt apply BigInt scala 47 at scala BigInt equals BigI
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • Scala SBT 和 JNI 库

    我正在编写一个简单的应用程序Scala通过以下方式使用 leveldb 数据库leveldbjni图书馆 我的build sbt文件看起来像这样 name Whatever version 1 0 scalaVersion 2 10 2 l
  • 如何使用 Scala 在 Spark 中漂亮地打印 JSON 数据帧?

    我有一个数据帧 我想将其作为有效的 json 写入 json 文件 我当前的代码如下所示 val df DataFrame myFun df toJSON saveAsTextFile myFile json 输出的格式为 如何将文件内容组
  • 加特林负载测试期间编译错误

    我正在尝试编写一个模拟 并且希望能够运行该模拟 我在尝试 mvn gatling execute 时遇到错误 我的 pom 有以下依赖项
  • 在 Scala 中调用反射案例类构造函数

    我可以通过静态反射获取案例类的默认构造函数 val symbol currentMirror classSymbol myObj getClass typeSignature typeSymbol asClass val ctor symb
  • Scala:尝试 .getOrElse 与 if/else

    我是一名相当新的 Scala 开发人员 我是一名经验丰富的 Java 开发人员 到目前为止 我一直很喜欢 Scala 的简单性 我真的很喜欢函数式结构 而且它们常常迫使你编写更简洁的代码 然而最近我注意到 由于舒适性和简单性 我最终使用了在

随机推荐

  • Boost 互斥范围锁

    我正在阅读 drdobbs com 上的 Boost Mutex 教程 并发现了这段代码 include
  • GNU gdb 如何显示源文件名和符号行

    当使用 GNU gdb 调试 c 进程时 list 命令将打印行但不告诉我文件名 设置断点可以显示我想要的所有行和文件信息 但我不想设置断点并且必须禁用或删除它 gdb b oyss funtion Breakpoint 13 at 0x8
  • 如何在 Google Chrome 扩展程序中创建侧边栏?

    我正在考虑在 Google Chrome 中创建一个侧边栏扩展 并读到有一个 API 调用 Google 禁用了它 那么也许有人知道如何创建并有例子吗 不幸的是 侧边栏 API 工作最近已停止 https bugs chromium org
  • Tkinter 按钮在禁用和更新后仍然响应点击

    我希望按钮启动命令 然后在执行时禁用并在执行完成后再次启用 当我单击该按钮时 它似乎被禁用并且命令被执行 但是 当我在禁用按钮时单击该按钮时 该命令会在第一次执行完成后第二次执行 似乎在第二次单击后 该按钮确实被禁用了 因为我可以在禁用它时
  • 在 NASM 中使用 istruc 时:“警告:尝试初始化 BSS 部分‘.bss’中的内存:忽略 [-w+other]”

    在搜索这个错误时我发现this https stackoverflow com questions 65731514 nasm attempt to initialize memory in bss section 77001709问题 但
  • 我需要删除分割块之间的一点空间

    我的两个分割块之间有一点空间 https i stack imgur com ysU0R png https i stack imgur com ysU0R png在这里你可以看到我的问题 我不明白为什么这些块会这样 body main w
  • kafka启动失败(版本0.8.0 beta1)

    我正在尝试在独立模式 在ec2上 上使用zookeeper版本 3 3 6 启动kafka服务 所以我运行 1 sbt update 2 sbt package 3 sbt assembly package dependency 然后启动z
  • Instagram 基本显示 API - 出现无效平台应用程序错误

    我在邮递员上点击 oauth access token API 时收到无效平台应用程序错误 注意 对于 app id 我使用 Instagram 应用程序 ID 有什么解决办法吗 error type OAuthException code
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • 如何在浏览器中重定向/渲染 Pyodide 输出?

    我最近遇到了pyodide项目 https github com iodide project pyodide 我已经使用 Pyodide 构建了一个小演示 但是尽管我花了很多时间查看源代码 但对我来说如何重定向还不清楚printpytho
  • 实体类型 不是当前上下文模型的一部分

    这是模型优先的方法 我已经对此进行了广泛的研究 但还没有得出答案 我已尝试以下链接中的所有建议 这似乎是同样的问题 但没有解决方案实体类型 不是当前上下文模型的一部分 https stackoverflow com questions 49
  • 欧拉项目 #16 - C# 2.0

    我一直在与欧拉计划搏斗在 C 2 0 中 问题的关键在于 您必须计算并迭代 604 位长 或大约 的数字中的每个数字 然后将这些数字相加即可得出答案 这提出了一个问题 C 2 0没有可以处理这种计算精度的内置数据类型 我可以用一个第三方库
  • 在 TypeScript 中将数组作为参数传递

    我有两种方法 static m1 args any using args as array static m2 str string args any do something call to m1 m1 args 致电给m1 1 2 3
  • Azure Blob 存储与 Azure 驱动器

    我正在考虑迁移到 Windows Azure 而不是典型的托管 但我不确定如何最好地存储图像 经过搜索 我发现有 2 种可能的解决方案 Blob 存储或 Azure 驱动器 我研究了 Blob 存储 尽管我已经开始习惯这个想法 但它需要对我
  • 将证书文件加载到证书对象中

    我正在尝试将证书文件加载到证书对象中 但出现以下异常 java security cert CertificateParsingException invalid DER encoded certificate data at sun se
  • 我需要有关如何在 Windows Azure 上部署 ASP.NET 网站的演练或步骤

    我需要有关如何在 Windows Azure 上部署 ASP NET 网站的演练或步骤 以下是在 Windows Azure 上部署 ASP NET 网站的步骤 假设 gt 1 您已经创建了一个 ASP Net 网站 Step 1 在你的机
  • 如何检测android中某个渲染器区域内的触摸事件?

    在android中我举了一个旋转球体的例子在这里给出 https bitbucket org jimcornmell opengltexturedsphere 它创建了一个简单的应用程序 显示一个旋转球体 地球 现在 如果在手机显示屏上按下
  • 加密字段的部分搜索

    最近我被分配了一个问题 加密数据库字段 例如SSN 但仍然必须保持 部分搜索 工作 例如 SSN 123 45 6789 在数据库中被加密为 abcdxyz 当用户在搜索框中输入 2345 时 它必须出现在结果中 我们的数据库中有数百万条记
  • 截断表后序列不会重置

    我在截断表后使用 SELECT lastval 来获取错误的序列号 当我截断表时 我使用 SELECT lastval 我得到了错误的 ID Use the TRUNCATESQL 命令 对于单个表 语法如下 TRUNCATE TABLE
  • 如何处理特定类型集合的操作?

    在我的申请中的几个不同地方 我需要采取Seq SalesRow 并返回一个Map String SalesRow 其中字符串是国家 地区的名称 我需要在几个地方使用它 例如 我获取所有 SalesRows 的列表 并获取按国家 地区划分的全