List
предоставляет метод partition
, который делает именно это:
List(1, 2, 100, 3, 4, 501, 12).partition(_ >= 100)
и возвращает:
(List(100, 501), List(1, 2, 3, 4, 12))
Из документация :
def section (p: (T) => Boolean): (List [T], List [T])
Разделение этой доступной коллекциив двух перемещаемых коллекциях в соответствии с предикатом.partition (p: (T) => Boolean): (List [T], List [T]) Делит эту перемещаемую коллекцию на две управляемые коллекции в соответствии с предикатом.
И мыможет инкапсулировать его в функцию, которая принимает предикат во входных данных:
def grouping[T](xs: List[T], rule: T => Boolean): (List[T], List[T]) = {
xs.partition(rule)
}
, чтобы применить его следующим образом:
grouping(List(1, 2, 100, 3, 4, 501, 12), (i: Int) => i >= 100)
grouping(List('A', 'C', 'Z', 'T', 'O', 'P', 'N', 'M', 'Y'), (x: Char) => x >= 'J')