简体   繁体   English

第一个元素在java.util.List中被覆盖

[英]first element is overridden in the java.util.List

I have a list converted to a String array. 我有一个列表转换为String数组。 At index 0 of the array, I have assigned the String "Select a value" . 在数组的索引0处,我为字符串分配了"Select a value" Now when I am iterating over the String array, the first element is overridden by the value I have assigned as "Select a value". 现在,当我遍历String数组时,第一个元素被我分配为“选择一个值”的值覆盖。

Below is the code: 下面是代码:

List<LocalDate> localDatesList = new ArrayList<LocalDate>();
localDatesList.add(new LocalDate());
localDatesList.add(new LocalDate().plusDays(1));
localDatesList.add(new LocalDate().plusDays(2));
localDatesList.add(new LocalDate().plusMonths(1));
localDatesList.add(new LocalDate().plusMonths(2));
List<String> tempDatesList = new ArrayList(localDatesList.size());
for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());  
}
String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
formattedDates[0]="Select a value";
for (String dates : formattedDates) {
    System.out.println(dates);
}

Output: 输出:

2016-10-14
2016-10-15
2016-11-13
2016-12-13

I tried to increase the size by 1, but null is added at the last index, and it's not showing the current date (first element I have added in the list). 我试图将大小增加1,但是在最后一个索引处添加了null ,并且没有显示当前日期(我在列表中添加的第一个元素)。

Please suggest what I am missing, how can I add the value "Select a Value" at index zero or first element in the list. 请提出我所缺少的建议,如何在索引零或列表中的第一个元素处添加值"Select a Value" The first element is missing in the list when I added formattedDates[0]="Select a value" . 当我添加formattedDates[0]="Select a value"时,列表中的第一个元素丢失了。

You are overriding your fist element in this line: 您在这一行中覆盖了拳头元素:

formattedDates[0]="Select a value"; formattedDates [0] =“选择一个值”;

change your code like this and add the "Select a Value" before your loop: 像这样更改代码,并在循环之前添加“选择值”:

List<LocalDate> localDatesList = new ArrayList<LocalDate>();
localDatesList.add(new LocalDate());
localDatesList.add(new LocalDate().plusDays(1));
localDatesList.add(new LocalDate().plusDays(2));
localDatesList.add(new LocalDate().plusMonths(1));
localDatesList.add(new LocalDate().plusMonths(2));

List<String> tempDatesList = new ArrayList(localDatesList.size());
tempDatesList.add("Select a value");
for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());
}

String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
for (String dates : formattedDates) {
    System.out.println(dates);
}

You are overriding first element by your own. 您正在自己重写第一个元素。 You can't increase the size of array, whatever you will assign for a particular position that will be updated with that value.If you change it will change for that particular position. 您不能增加数组的大小,无论您要分配给将用该值更新的特定位置的值是什么,如果更改,它将针对该特定位置而改变。

In your code you are assigning 0 position with select a value( formattedDates[0]="Select a value"; ). 在您的代码中,您要分配0位置并选择一个值( formattedDates[0]="Select a value"; )。

So before changing list to array, add "Select a value" to list and then convert.Then it will work fine. 因此,在将列表更改为数组之前,请在列表中添加"Select a value" ,然后进行转换。然后它将正常工作。

tempDatesList.add("Select a value");

then add dates 然后添加日期

for (LocalDate date : localDatesList) {
    tempDatesList.add(date.toString());  
}

and then 接着

tempDatesList.toArray(new String[localDatesList.size()]);

Here is the refined code: 这是精炼的代码:

List<String> localDatesList = new ArrayList<String>();
localDatesList.add(LocalDate.now().toString());
localDatesList.add(LocalDate.now().plusDays(1).toString());
localDatesList.add(LocalDate.now().plusDays(2).toString());
localDatesList.add(LocalDate.now().plusMonths(1).toString());
localDatesList.add(LocalDate.now().plusMonths(2).toString());
localDatesList.add("Select a value");
String[] formattedDates = localDatesList.toArray(new String[localDatesList.size()]);
for (String dates : formattedDates) {
    System.out.println(dates);
}

When you put the value "Select a value" you change the array's first value. 当您输入值“选择值”时,将更改数组的第一个值。 You can do something like this: 您可以执行以下操作:

String[] formattedDates = new String[localDatesList.size() + 1];
formattedDates[0]="Select a value";
System.arraycopy(tempDatesList.toArray(), 0, formattedDates, 1, tempDatesList.toArray().length);

I have modified the code for you. 我已经为您修改了代码。

public static void main(final String arhgsp[]) {
    final List<LocalDate> localDatesList = new ArrayList<>();
    localDatesList.add(LocalDate.now());
    localDatesList.add(LocalDate.now().plusDays(1));
    localDatesList.add(LocalDate.now().plusDays(2));
    localDatesList.add(LocalDate.now().plusMonths(1));
    localDatesList.add(LocalDate.now().plusMonths(2));
    final List<String> tempDatesList = new ArrayList<>(localDatesList.size());
    for (final LocalDate date : localDatesList) {
        tempDatesList.add(date.toString());
    }
    final String[] formattedDates = tempDatesList.toArray(new String[localDatesList.size()]);
    formattedDates[0] = "Select a value";
    for (final String dates : formattedDates) {
        System.out.println(dates);
    }
}

produced the output 产生了输出

Select a value
2016-10-14
2016-10-15
2016-11-13
2016-12-13

Hope this would work for you. 希望这对您有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM