我有这段代码:
List<Banner> bannerLists = ...; // Get the list
for (Banner bannerList : bannerLists) {
bannerList.getLocation().setLocationName("1 - "
+ bannerList.getLocation().getLocationName());
log.info("LOCATION " + bannerList.getId() + " : "
+ bannerList.getLocation().getLocationName());
}
假设每个locationName
具有相同的值:LOCATIONA
,但id
彼此不同。
日志导致类似:
这就像修改过的字段在下一次重复时仍会被调用。
这是结构(我省略了不必要的细节):
Banner.java
...
private Location location;
...
Location.java
...
private String locationName;
...
怎么了?我尝试使用for(int i = 0; i ...
,但同样。
修改
for (Banner bannerList : bannerLists) {
Location location = banner.getLocation();
location.setLocationName("1 - " + location.getPageName());
bannerList.setLocation(location);
log.info("LOCATION " + bannerList.getId() + " : "
+ bannerList.getLocation().getLocationName());
}
答案 0 :(得分:4)
当你得到它时,你试图递归设置locationName
。我想你想要它的位置。您可以将引用Location
保存到变量中。总之,像
List<Banner> bannerLists = ...; // Get the list
int pos = 0;
for (Banner banner : bannerLists) {
Location location = banner.getLocation();
String locName = Integer.toString(pos++);
location.setLocationName(locName);
log.info("LOCATION " + bannerList.getId() + " : " + locName);
}
或
List<Banner> bannerLists = ...; // Get the list
for (int pos = 0, len = bannerLists.size(); pos < len; pos++) {
Banner banner = bannerLists.get(pos);
Location location = banner.getLocation();
String locName = Integer.toString(pos);
location.setLocationName(locName);
log.info("LOCATION " + bannerList.getId() + " : " + locName);
}
答案 1 :(得分:2)
您正在循环的每次迭代中更改位置名称,在开头添加“1 - ”。
bannerList.getLocation().setLocationName("1 - "
+ bannerList.getLocation().getLocationName());
因此,如果列表中的所有横幅共享相同的位置,则在每次迭代中您都会看到不同的名称。
如果您希望为所有横幅打印相同的位置名称,请不要更新循环内的位置名称。
答案 2 :(得分:1)
我认为这种行为的原因是所有横幅实际上都指向同一个Location对象,而不仅仅是一个具有相同名称的对象。
这会考虑您已更新的所有地点:
ArrayList<Location> prev = new ArrayList<Location>();
for (Banner bannerList : bannerLists) {
Location location = bannerList.getLocation();
if (!prev.contains(location)) {
location.setLocationName("1 - " + location.getLocationName());
prev.add(location);
}
log.info("LOCATION " + bannerList.getId() + " : "
+ bannerList.getLocation().getLocationName());
}
答案 3 :(得分:0)
用变量替换第一个参数,就像这样发生,因为你只是通过循环添加一个带有其他字符串的字符串,
类似的东西:
for i=0; i<3; i++
print("1 + ")
结果
1 +
1 + 1
1 + 1 + 1
修改为:
for i=0; i<3; i++
print(i + "some args")
你的代码应该是这样的,
counter = 0;
for (Banner bannerList : bannerLists) {
counter += 1;
bannerList.getLocation().setLocationName(counter + " - " + banner.getLocation().getLocationName());
log.info("LOCATION : " + bannerList.getLocation().getLocationName());
}
变量counter
将通过循环更新,并更新您的ID
答案 4 :(得分:0)
在我的部分它运作良好我认为这是一个问题横幅或位置类。
看看这个。public class Test1 {
public static void main(String[] args){
List<Banner> bannerList = generateBanners();
for(Banner banner : bannerList){
banner.getLocation().setLocationName("1 - " + banner.getLocation().getLocationName());
System.out.println("ID : "+banner.getLocation().getLocationId() +" Value : "+banner.getLocation().getLocationName());
}
}
public static List<Banner> generateBanners(){
List<Banner> banners = new ArrayList<Banner>();
Location location = new Location(1,"LOCATIONA");
Banner banner = new Banner(location);
banners.add(banner);
location = new Location(2,"LOCATIONA");
banner = new Banner(location);
banners.add(banner);
location = new Location(3,"LOCATIONA");
banner = new Banner(location);
banners.add(banner);
return banners;
}
}
这是我的Banner类
public class Banner{
private Location location;
public Banner(){}
public Banner(Location location){
this.location = location;
}
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
}
我的位置课程。
public class Location{
private int locationId;
private String locationName;
public Location(){}
public Location(int locationId, String locationName){
this.locationName = locationName;
this.locationId = locationId;
}
public int getLocationId() {
return locationId;
}
public void setLocationId(int locationId) {
this.locationId = locationId;
}
public String getLocationName() {
return locationName;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
}
ID : 1 Value : 1 - LOCATIONA
ID : 2 Value : 1 - LOCATIONA
ID : 3 Value : 1 - LOCATIONA
如果错误的话,请纠正我。