java - Convertit list<bean> en une liste d'un autre bean.
PHP中文网
PHP中文网 2017-05-17 10:07:31
0
4
1060
public static class DataBean {
    private int value;
    private BigDecimal name;}
public class ChartData {
    private Integer time;
    private BigDecimal result;}

J'ai besoin d'une opération similaire à la suivante,

List<ChartData> data = getdata();
List<SeriesBean.DataBean> yValue = data.stream().map(item -> (SeriesBean.DataBean) item);

Erreur signalant un type non convertible, DataBean est une classe statique interne.
Il existe reinterpret_cast en C++ qui peut être forcé à être converti, et Java devrait avoir une méthode correspondante

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(4)
大家讲道理
BeanUtils de

Apache Commons et BeanUtils de BeanUtilsSpringBeanUtils 都有提供 copyProperties 方法,作用是将一个对象的属性的值赋值给另外一个对象,但前提是两个对象的属性类型且 名字 相同。

比如使用 Apache Commons 的 BeanUtils

import java.math.BigDecimal;
import org.apache.commons.beanutils.BeanUtils;

public class TestBeanUtils {

    public static void main(String[] args) throws Exception {

        ChartData src = new ChartData(1, BigDecimal.valueOf(123));
        DataBean dest = new DataBean();

        BeanUtils.copyProperties(dest, src);

        System.out.println(src);
        System.out.println(dest);
    }

    public static class DataBean {

        private int time;
        private BigDecimal result;

        public int getTime() {
            return time;
        }

        public void setTime(int time) {
            this.time = time;
        }

        public BigDecimal getResult() {
            return result;
        }

        public void setResult(BigDecimal result) {
            this.result = result;
        }

        @Override
        public String toString() {
            return "DataBean{" + "time=" + time + ", result=" + result + '}';
        }

    }

    public static class ChartData {

        private Integer time;
        private BigDecimal result;

        public ChartData(Integer time, BigDecimal result) {
            this.time = time;
            this.result = result;
        }

        public Integer getTime() {
            return time;
        }

        public BigDecimal getResult() {
            return result;
        }

        public void setTime(Integer time) {
            this.time = time;
        }

        public void setResult(BigDecimal result) {
            this.result = result;
        }

        @Override
        public String toString() {
            return "ChartData{" + "time=" + time + ", result=" + result + '}';
        }

    }

}


所以如果 ChartDataDataBeanSpring

fournissent tous deux copyProperties, sa fonction est d'attribuer la valeur de l'attribut d'un objet à un autre objet, mais le principe est que les types d'attribut des deux objets et

name

sont les mêmes. #🎜🎜# #🎜🎜#Par exemple, utilisez BeanUtils d'Apache Commons : #🎜🎜#
List<ChartData> data = getdata();
List<DataBean> yValue = new ArrayList<>(data.size());
for (ChartData item : data) {
    DataBean bean = new DataBean();
    BeanUtils.copyProperties(bean, item);
    yValue.add(bean);
}
#🎜🎜# #🎜🎜#
#🎜🎜#Donc, si les noms d'attribut de ChartData et DataBean sont les mêmes, votre code peut être écrit comme ceci (il n'est pas nécessaire d'écrire des méthodes de définition pour chaque attribut ) : #🎜🎜# rrreee #🎜🎜#Bien sûr, une chose à noter est que cela est implémenté en utilisant la réflexion, ce qui est moins efficace que d'écrire directement la méthode setter. #🎜🎜#
过去多啦不再A梦
List<DataBean> yValue = data.stream().map(item -> {
    DataBean bean = new DataBean();
    bean.setName(item.getResult());
    bean.setValue(item.getTime());
    return bean;
}).collect(Collectors.toList());
迷茫

Le transfert forcé ne peut être effectué que de la classe parent à la classe enfant. Cliquez simplement sur chaque champ et définissez-le

.
阿神

L'affiche originale doit apprendre la conversion de type Java. Dans ces conditions, un transfert forcé n’est pas possible.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal