【问题标题】:Iteration over typesafe files迭代类型安全文件
【发布时间】:2013-10-29 14:43:03
【问题描述】:

我已阅读此主题

Iterate over fields in typesafe config

做了一些更改,但仍然不知道如何在 play 框架中迭代 conf 文件。

  Providers=[{1234 : "CProduct"},
{12345 : "ChProduct"},
{123 : "SProduct"}]

这是我的名为 providers.conf 的 Conf 文件,问题是我如何遍历它们并从中创建一个下拉框。如果可能的话,我想将它们作为地图,即 [int,string]

我知道,我必须像对待他们一样

val config = ConfigFactory.load("providers.conf").getConfigList("Providers")

我可以像这样的 conf 文件,但是,我应该从模板中获取它,以便我需要将其转换为 hashmap 或 list 或任何功能。

干杯,

【问题讨论】:

  • 问题已被编辑,因为感谢@AlexLv,我取得了一些进展。

标签: scala playframework-2.0 typesafe


【解决方案1】:

我不确定这是否是最有效的方法,但这可行:

1) 获取我们的配置文件:

val config = ConfigFactory.load().getConfigList("providers")
scala> config.getConfigList("providers")
res23: java.util.List[_ <: com.typesafe.config.Config] = [Config(SimpleConfigObject({"id":"1234","name":" Product2"})), Config(SimpleConfigObject({"id":"4523","name":"Product1"})), Config(SimpleConfigObject({"id":"432","name":" Product3"}))]

2) 本例引入Provider实体:

case class Provider(id: String, name: String)

3) 现在让我们将带有配置的列表转换为提供者:

import scala.collection.JavaConversions._
providers.map(conf => Provider(conf.getString("id"), conf.getString("name"))).toList
res27: List[Provider] = List(Provider(1234, Product2), Provider(4523,Product1), Provider(432, Product3))

我们需要显式转换它toList,因为默认情况下Java List 转换为Buffer。

【讨论】:

  • 非常感谢您的回答,但是,有一个问题会有很多这样的提供者,我不想通过输入内容来获取它们,而是我想创建一个循环。这是我的主要问题。
  • @Ducaz035 don't want to get them by typing stuff下面是什么意思?
  • 好的,现在我理解了这个过程,但还有一个问题,我如何在这里定义 providers.map ?它会从哪里来?
  • val config = ConfigFactory.load("providers.conf").getConfigList("Providers") case class Provider(id: String, name: String) 到这里没问题,现在我必须现在进入 toList。但在这里找不到 providers.map 是什么意思?
  • @Ducaz035 阅读这篇文章brunton-spall.co.uk/post/2011/12/02/…
【解决方案2】:

这是我的解决方案,

   val config = ConfigFactory.load("providers.conf").getConfigList("Providers")

    var providerlist = new java.util.ArrayList[model.Provider]
    val providers = (0 until config.size())
    providers foreach {
      count => 
        val iterator = config.get(count).entrySet().iterator()

        while(iterator.hasNext()) {
          val entry = iterator.next()

          val p = new Provider(entry.getKey(), entry.getValue().render())
          providerlist.add(p);
        }
    }
    println(providerlist.get(0).providerId+providerlist.get(0).providerName)
    println(providerlist.get(33).providerId+providerlist.get(33).providerName)

还有我的 provider.class

package model

case class Provider(providerId: String, providerName: String) 

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 2013-07-10
    • 2023-03-14
    • 2023-03-20
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多