Функция высшего порядка с аргументом fn против вызова метода одноэлементного объекта
Я пытаюсь удалить дубликаты кода, используя функции высшего порядка.
Чем это отличается от вызова метода Singleton Object?
Образец кода:
filterDFForPaymentType(filterDF, df, "Manual")
filterDFForPaymentType(filterDF, df, "Electronic")
def filterDFForPaymentType(fn: (DataFrame, String) => DataFrame, df: DataFrame, paymentType: String) {
fn(df, paymentType)
}
def filterDF(df: DataFrame, paymentType: String): DataFrame = {
val filteredDF = df.where(col("paymenttypecol") === paymentType)
filteredDF
}
Чем это отличается от вызова одной и той же функции с помощью метода объекта Singleton.
filterDFForPaymentType(UtilClass.filterDF(df, "Manual"))
filterDFForPaymentType(UtilClass.filterDF(df, "Electronic"))
Я уверен, что мы можем сделать гораздо больше, используя функции высшего порядка, но я не совсем понимаю.
Это какой-то правильный способ использования функций высшего порядка?
Может кто-нибудь дать мне ссылку для правильного использования функций высшего порядка с примерами?
1 ответ
Здесь у вас есть функция filterDFForPaymentType, которая не делает ничего, кроме как возвращает результат вашей другой функции, в этом случае код можно сократить до
filterDF(df, "Manual")
filterDF(df, "Electronic")
def filterDF(df: DataFrame, paymentType: String): DataFrame = {
val filteredDF = df.where(col("paymenttypecol") === paymentType)
filteredDF
}
Функции более высокого порядка полезны, когда они сами реализуют некоторую логику (то есть в коллекциях деконструкцию и конструирование коллекции), в то же время используя переданную функцию как ее часть. В случае, если необязательно будет использоваться переданная функция, может быть разница в производительности.