如何基于其他集合的所有元素的笛卡尔积构建集合?

izh*_*sin 4 java collections scala

你可以根据几个数组/其他集合中项目的完整迭代,共享任何在Scala中创建不可变集合的好解决方案吗?

例如,在Java中,您可以使用:

List<String> signals = ...;
List<SignalState> states = ...;

List<SignalAndState> result = new ArrayList<~>(signals.size() * states.size());

for (String signal: signals) {
  for (SignalState state: states) {
    // some if() condition or process() function can be here 
    result.add(new SignalAndState(signal, state))
  }
}
Run Code Online (Sandbox Code Playgroud)

使用Scala构建smth的最佳实践是什么?我认为,相同的方法(在for()中使用for())是个坏主意,并且根本不兼容Scala语言的对象功能.

jce*_*ern 5

我不确定最佳做法,但是你可以通过一种方式for来创建你正在寻找的集合:

val signals = List[String](...)
val states = List[SignalState](...)

for(signal <- signals; state <- states) yield new SignalAndState(signal, state)
Run Code Online (Sandbox Code Playgroud)

这应该产生List[SignalAndState]所有元素

或者,你可以使用flatMapmap来完成相同的结果,如:

signals flatMap ( signal => states map ( state => new SignalAndState(signal, state)))
Run Code Online (Sandbox Code Playgroud)