1. 程式人生 > >List實體集合更改任意Model中某一個欄位的值,其他Model值也一起變了,引用型別和值型別的問題

List實體集合更改任意Model中某一個欄位的值,其他Model值也一起變了,引用型別和值型別的問題

工作中遇到這麼一個問題,現在有一個Model,我需要將該Model變為兩個Model並且放入List集合當中去,這兩個Model完全一樣,但是其中某個欄位的值不一樣,經過直接賦值我們發現整個List中所有Model的那個欄位值都變成一樣的了,並沒有修改成功,因此設計到了引用型別和值型別的問題,此處用clone方法解決。

例如:

List<Model> modelList = new List<Model>();

Model contentModel = new Model();  //contentModel.ID=0

foreach(string id in idList)    // idList(1,2,3)

{

Model model = new Model();

        model = contentModel ;

model.ID = id;

       modelList .Add(model);

}

// modelList[0].ID = 3    modelList[1].ID = 3   modelList[2].ID = 3

這裡發現id並沒有賦值到每一個對應的實體當中,而是List中所有Model該欄位的值都變成一樣的了

解決方法:

1.在實體類中,我們實現ICloneable     public class contentModel: ICloneable

2.在實體類中,加上Clone方法  

 public object Clone()
{
       return MemberwiseClone();
}

3.將要修改欄位的實體進行克隆

Model model = (Model)contentModel.Clone();

4.此時再次賦值,就可以啦

foreach(string id in idList)

{

Model model = (Model)contentModel.Clone();

        model = contentModel ;

model.ID = id;

       modelList .Add(model);

}

// modelList[0].ID = 1    modelList[1].ID = 2   modelList[2].ID = 3

相關推薦

List實體集合更改任意Model一個其他Model一起引用型別型別的問題

工作中遇到這麼一個問題,現在有一個Model,我需要將該Model變為兩個Model並且放入List集合當中去,這兩個Model完全一樣,但是其中某個欄位的值不一樣,經過直接賦值我們發現整個List中所有Model的那個欄位值都變成一樣的了,並沒有修改成功,因此設計到了引用

Oracle Group by 查詢表一個其哪個值得記錄數最多或最少

select "ReturnId",count("ReturnId") as COUNT_RETURNID from "ECRSums" group by "ReturnId" order by COUNT_RETURNID; 要查詢的欄位名 為 Return_Id ,

物件一個為空時不進行展示

String index=""; for (int i = 0; i < statEmails.size(); i++) { String string = statEmails

Android List(集合)的物件以一個排序

在Android開發中,有時我們需要對一個物件的集合按照某一個欄位進行排序, Bean public class Student { private int studentId;

java的list集合如何根據物件的某個排序

集合提供了一個工具類:java.util.Collections 集合的工具類提供了若干靜態方法,可以方便我們隊集合做一系列操作,其中之一就是排序 需要注意,提供的方法只能對List集合排序,因為Set集合不全是有序的。 但是如果要求根據集合中某個元素的值排序,該如何進行呢? 程式碼

javalist裡面存放map根據map一個進行排序

Java中list裡面存放map,根據map中的某一個欄位進行排序 例如: package com;   import java.util.ArrayList;   import java.util.Collections;   import java.util.Comparator;   impor

Java list裡面存放map根據map一個進行排序 lambda

//lambda Collections.sort(list, (o1, o2) -> { String name1 = (String) o1.get("id"); String name2 = (String) o2.get("id"); return name2.

mysql把表拆分為多列

一:sql資料庫截圖 二:sql語句      SELECT id, house_no as '總稱',SUBSTR(house_no, 1, 4) AS '小區名稱',SUBSTR(house_n

spring boot mongodb 統計表的所有其中aggregate的用法之一

pom.xml 依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb<

DataTable根據一個來改變本行格式

效果如圖: 根據紅色 字型這一列的資料,是到期日期,如果在一個月內到期的話,那麼該行將會變成黃色顯示,並且到期日期將會變成紅色。 程式碼如下: "aoColumnDefs":[ {//第 14 列 到期日期

bootstrapTable行內動態編輯行資料

今天開發者遇到了一個需求:在一個table資料中,點選某行的某一個列資料就行修改該行該欄位的屬性值(另一篇博文有優化方法)。 前言:在網上搜索了一番,使用x-editable元件去實現這個功能,在下載了一些js檔案後,一番搗鼓搞不定(如需要下面js留下地址送你),後來使

laravel 自增、自減

increment自增方法有兩個引數:第一個為必填,代表要對資料表的哪個欄位進行自增操作,第二個引數為可選,如果為空則表示每次遞增1,如果填寫了比如3,則表示每次在原有的基礎上遞增3。 DB操作: D

php對二維陣列進行排序

<?php   $array = array(  array('name'=>'手機','brand'=>'諾基亞','price'=>1050),  array('name'=>'膝上型電腦','brand'=>'lenovo','pr

mybatis。插入語句如何插入資料庫最大(純sql實現)

<insert id="inserts"> <selectKey keyProperty="ID" ORDER="BEFORE" resultType="java.lang.I

對jsonarray某個物件的一個進行排序

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import com.alibaba.fastjson.JSON

Oracle中將一個的資料更新到另一個

首先想到的sql:update 表2 set 表2.c=(select val from 表2 where 表1.a=表2.a);但這樣會出現在表1中有的行,如果在表2中沒有對應的行,值被更新為null

怎麼對list裡面的資料的一個進行排序

集合類List存放的資料,預設是按照放入順序排序的。我們也可以對list中某一個元素進行排序。例如: package test.tool.gui.dbtool.util; import java

mysql查詢一個是否包含中文字元

https://www.cnblogs.com/chase-wind/p/6628162.html **********************************************   在使用mysql時候,某些欄位會儲存中文字元,或是包含中文字元的串,查詢出來的方法是:  

判斷資料庫一個用逗號分開裡面是否有重複

String[] arr = goodsList.split(",");  //先擷取按照逗號擷取 for(int i = 0;i < arr.length-1;i++){ //迴圈開始元素 for(int j = i + 1;j < arr.length;j++){ //迴圈

mysql交換對調兩條記錄的一個

在對資料庫的資料在前端進行展示列表的時候,經常有這麼一個需求,就是將已經排序的列表進行調整順序,比如 現在想把id為8的資料, 向下移一位,也就是和id為11的sort欄位進行對調 第一種方式 這個一般來說是把兩條資料都查出來, user1.se