搜尋

首頁  >  問答  >  主體

java - 將list<bean> 強轉成另一種bean的list。

public static class DataBean {
    private int value;
    private BigDecimal name;}
public class ChartData {
    private Integer time;
    private BigDecimal result;}

我需要類似如下的操作,

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

報錯不可轉換的型別,DataBean是個內部靜態類別。
C 裡面有reinterpret_cast可以強轉,java應該有對應的方法的

PHP中文网PHP中文网2749 天前1038

全部回覆(4)我來回復

  • 大家讲道理

    大家讲道理2017-05-17 10:09:31

    Apache CommonsBeanUtilsSpringBeanUtils 都有提供 copyPropertiesSpring

    都有提供copyProperties 方法,作用是將一個對象的屬性的值賦值給另外一個對象,但前提是兩個對象的屬性類型且

    名字BeanUtils 相同。

    例如使用 Apache Commons 的

    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 + '}';
            }
    
        }
    
    }
    


    ChartDataDataBean

    所以如果

    的屬性名稱一致,你的程式碼可以這樣寫(就不用挨個屬性的寫 setter 方法了):🎜
    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);
    }
    🎜當然,要注意的一點是,這是使用反射實現的,效率要比直接寫 setter 方法要低一些。 🎜

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-17 10:09:31

    雷雷

    回覆
    0
  • 迷茫

    迷茫2017-05-17 10:09:31

    強轉只能父類轉子類,你這就老實點一個個字段set過去就好了

    回覆
    0
  • 阿神

    阿神2017-05-17 10:09:31

    樓主學習一下 Java 的型別轉換啊。這種條件下,不能強轉的。

    回覆
    0
  • 取消回覆