惯用的Scala是一种懒洋洋地生成组合的方法

惯用的Scala是一种懒洋洋地生成组合的方法,scala,combinations,Scala,Combinations,我想生成一些值的组合,如下代码所示: object ContinueGenerate { val foods = List("A", "B", "C") val places = List("P1", "P2", "P3") val communities = List("C1", "C2", "C3", "C4") case class Combination(food: String, place: String, community: String) def al

我想生成一些值的组合,如下代码所示:

object ContinueGenerate {

  val foods = List("A", "B", "C")
  val places = List("P1", "P2", "P3")
  val communities = List("C1", "C2", "C3", "C4")

  case class Combination(food: String, place: String, community: String)

  def allCombinations() = {
    for {
      food <- foods; place <- places; community <- communities
    } yield Combination(food, place, community)
  }

  def main(args: Array[String]) {
    allCombinations foreach println
  }

}
对象连续生成{
val食品=列表(“A”、“B”、“C”)
val位置=列表(“P1”、“P2”、“P3”)
val社区=列表(“C1”、“C2”、“C3”、“C4”)
案例类组合(食物:字符串、地点:字符串、社区:字符串)
定义所有组合(){
为了{
食物你使用溪流:

object ContinueGenerate {

  val foods = Stream("A", "B", "C")
  val places = Stream("P1", "P2", "P3")
  val communities = Stream("C1", "C2", "C3", "C4")

  case class Combination(food: String, place: String, community: String)

  def allCombinations() = {
    for {
      food <- foods; place <- places; community <- communities
    } yield Combination(food, place, community)
  }

  def main(args: Array[String]) {
    allCombinations foreach println
  }

}
对象连续生成{
val食品=流(“A”、“B”、“C”)
val位置=河流(“P1”、“P2”、“P3”)
val社区=河流(“C1”、“C2”、“C3”、“C4”)
案例类组合(食物:字符串、地点:字符串、社区:字符串)
定义所有组合(){
为了{

食物您可以通过在每个列表上使用
视图来实现这一点。在下面的代码中,我添加了一个副作用,以便在为每个元素调用
产量
时可以看到它

val foods = List("A", "B", "C")
val places = List("P1", "P2", "P3")
val communities = List("C1", "C2", "C3", "C4")

case class Combination(food: String, place: String, community: String)

def allCombinations() =
  for {
    food <- foods; place <- places; community <- communities
  } yield {
    val comb = Combination(food, place, community)
    println(comb)
    comb
  }

//Prints all items
val combinations = allCombinations()

def allCombinationsView() =
  for {
    //Use a view of each list
    food <- foods.view; place <- places.view; community <- communities.view
  } yield {
    val comb = Combination(food, place, community)
    println(comb)
    comb
  }
//Prints nothing
val combinationsView = allCombinationsView()

//Prints 5 items
val five = combinationsView.take(5).toList
val foods=列表(“A”、“B”、“C”)
val位置=列表(“P1”、“P2”、“P3”)
val社区=列表(“C1”、“C2”、“C3”、“C4”)
案例类组合(食物:字符串、地点:字符串、社区:字符串)
def allCombinations()=
为了{
食物