Это очень простой пример: квадратные целые числа, а затем добавьте их
public int sumSquare(int[] list) {
int s = 0;
for(int i = 0; i < list.length; i++) {
s += list[i] * list[i];
}
return s;
}
В скале:
val ar = Array(1,2,3)
def square(x:Int) = x * x
def add(s:Int,i:Int) = s+i
ar.map(square).foldLeft(0)(add)
Компактная карта применяет функцию ко всем элементам массива, поэтому:
Array(1,2,3).map(square)
Array[Int] = Array(1, 4, 9)
Свернуть влево будет начинаться с 0 в качестве аккумулятора (ов) и применять add(s,i)
ко всем элементам (i) массива, так что:
Array(1,4,9).foldLeft(0)(add) // return 14 form 0 + 1 + 4 + 9
Теперь это может быть дополнительно сжато до:
Array(1,2,3).map(x => x * x ).foldLeft(0)((s,i) => s + i )
Это я не буду пытаться в Java (для большой работы), превратить XML в карту:
<a>
<b id="a10">Scala</b>
<b id="b20">rules</b>
</a>
Еще один лайнер для получения карты из XML:
val xml = <a><b id="a10">Scala</b><b id="b20">rules</b></a>
val map = xml.child.map( n => (n \ "@id").text -> n.child.text).toMap
// Just to dump it.
for( (k,v) <- map) println(k + " --> " + v)