基于多个数组/其他集合中项目的完整迭代,您能否共享在Scala中创建不可变集合的任何好解决方案?
E.g。在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))
}
}
使用Scala构建类似smth的最佳做法是什么? 我认为,同样的方法(在for()中使用for())是个坏主意,并且根本不兼容Scala语言的对象功能。
答案 0 :(得分:5)
我不确定最佳做法,但有一种方法可以让我们使用for
理解来创建您正在寻找的集合:
val signals = List[String](...)
val states = List[SignalState](...)
for(signal <- signals; state <- states) yield new SignalAndState(signal, state)
这应该产生一个包含所有元素的List[SignalAndState]
或者,您可以使用flatMap
和map
来完成相同的结果,例如:
signals flatMap ( signal => states map ( state => new SignalAndState(signal, state)))