Лямбда-функции наиболее полезны в таких вещах, как функции обратного вызова или места, в которых вам нужна функция throwaway. Пример JAB идеален - лучше было бы сопровождать аргумент ключевого слова key
, но он по-прежнему содержит полезную информацию.
Когда
def key(x):
return x[1]
появляется на расстоянии 300 строк от
[(1,2), (3,1), (5,10), (11,-3)].sort(key)
какой ключ делает? Нет никаких признаков. У вас может быть какая-то догадка, особенно если вы знакомы с этой функцией, но обычно это требует возврата. OTOH,
[(1,2), (3,1), (5,10), (11,-3)].sort(lambda x: x[1])
говорит вам намного больше.
Вероятно, есть еще какая-то информация, но уже это огромная сумма, которую вы получаете только с помощью анонимного лямбда-функции вместо именованной функции.
Плюс это не загрязняет ваше пространство имен;)
Я полагаю, у вас уже есть решение, поскольку с тех пор, как вы спросили, прошло много времени. Однако он не помечен как решенный, и, возможно, я смогу помочь другим пользователям.
Вы пробовали определить подкласс BeanUtilsBean
пакета org.commons.beanutils
? Фактически, BeanUtils
использует этот класс, так что это улучшение решения, предложенного dfa.
Проверяя исходный код этого класса, я думаю, что вы можете перезаписать метод copyProperty
, проверив нулевые значения и ничего не делая, если значение равно нулю.
Примерно так:
package foo.bar.copy;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtilsBean;
public class NullAwareBeanUtilsBean extends BeanUtilsBean{
@Override
public void copyProperty(Object dest, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
if(value==null)return;
super.copyProperty(dest, name, value);
}
}
Затем вы можете просто создать экземпляр NullAwareBeanUtilsBean
и использовать его для копирования ваших bean-компонентов, например:
BeanUtilsBean notNull=new NullAwareBeanUtilsBean();
notNull.copyProperties(dest, orig);
вы можете использовать Apache Common BeanUtils , а точнее помощник copyProperties в классе BeanUtils :
BeanUtils.copyProperties(parent, anotherParent);
однако почему вы хотите копировать только не- нулевые свойства? если свойство в parent
имеет значение NULL, просто скопировав его, вы получите значение NULL также в anotherParent
, верно?
Угадайте ... вы хотите обновить компонент другим компонентом?