java - 將list<bean> 強轉(zhuǎn)成另一種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);
報錯不可轉(zhuǎn)換的類型,DataBean是個內(nèi)部靜態(tài)類。C++里面有reinterpret_cast可以強轉(zhuǎn),java應該有相應的方法的
問題解答
回答1:Apache Commons 的 BeanUtils 和 Spring 的 BeanUtils 都有提供 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;}@Overridepublic 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;}@Overridepublic String toString() { return 'ChartData{' + 'time=' + time + ', result=' + result + ’}’;} }}
所以如果 ChartData 和 DataBean 的屬性名稱一致,你的代碼可以這樣寫(就不用挨個屬性的寫 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);}
當然,需要注意的一點是,這是使用反射實現(xiàn)的,效率要比直接寫 setter 方法要低一些。
回答2:List<DataBean> yValue = data.stream().map(item -> { DataBean bean = new DataBean(); bean.setName(item.getResult()); bean.setValue(item.getTime()); return bean;}).collect(Collectors.toList());回答3:
強轉(zhuǎn)只能父類轉(zhuǎn)子類,你這就老實點一個個字段set過去就好了
回答4:樓主學習一下 Java 的類型轉(zhuǎn)換啊。這種條件下,不能強轉(zhuǎn)的。
相關(guān)文章:
1. objective-c - iOS開發(fā)支付寶和微信支付完成為什么跳轉(zhuǎn)到了之前開發(fā)的一個app?2. mysql優(yōu)化 - 關(guān)于mysql分區(qū)3. 請教各位大佬,瀏覽器點 提交實例為什么沒有反應4. 致命錯誤: Class ’appfacadeTest’ not found5. javascript - ionic2 input autofocus 電腦成功,iOS手機鍵盤不彈出6. python - 管道符和ssh傳文件7. css - 移動端字體設(shè)置問題8. css - 求推薦適用于vue2的框架 像bootstrap這種類型的9. html5 - 如何實現(xiàn)帶陰影的不規(guī)則容器?10. javascript - 循環(huán)嵌套多個promise應該如何實現(xiàn)?
