Помощник для того, чтобы скопировать ненулевые свойства из объекта в другой? (Джава)

Лямбда-функции наиболее полезны в таких вещах, как функции обратного вызова или места, в которых вам нужна функция 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])

говорит вам намного больше.

  1. Сортировка принимает функцию в качестве аргумента
  2. Эта функция принимает 1 параметр (и " возвращает «результат»
  3. Я пытаюсь отсортировать этот список по 2-ому значению каждого из элементов списка
  4. (Если список был переменной, t см. значения), эта логика ожидает, что в списке будет по крайней мере 2 элемента.

Вероятно, есть еще какая-то информация, но уже это огромная сумма, которую вы получаете только с помощью анонимного лямбда-функции вместо именованной функции.

Плюс это не загрязняет ваше пространство имен;)

34
задан stian 19 December 2012 в 08:53
поделиться

2 ответа

Я полагаю, у вас уже есть решение, поскольку с тех пор, как вы спросили, прошло много времени. Однако он не помечен как решенный, и, возможно, я смогу помочь другим пользователям.

Вы пробовали определить подкласс 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);
86
ответ дан 27 November 2019 в 04:19
поделиться

вы можете использовать Apache Common BeanUtils , а точнее помощник copyProperties в классе BeanUtils :

 BeanUtils.copyProperties(parent, anotherParent);   

однако почему вы хотите копировать только не- нулевые свойства? если свойство в parent имеет значение NULL, просто скопировав его, вы получите значение NULL также в anotherParent , верно?

Угадайте ... вы хотите обновить компонент другим компонентом?

0
ответ дан 27 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: