java - 添加到数组对象更改相同的值java

标签 java arrays collections

将 userdetails 添加到 arr 数组后,所有元素都变为相同的值。请解释一下如何做。

@Autowired UserDto userDto;

public ArrayList getAllUsers()  throws commonException  {
        ArrayList<UserDto> arr = new ArrayList<>(); 
        Iterable<User> user = userRepository.findAll();
        for(User userDetails: user){
             userDto.setUsername(userDetails.getUsername());
              userDto.setEmail(userDetails.getEmail());
              userDto.setPassword(userDetails.getPassword());
              arr.add(userDto);
        }



        return arr;

最佳答案

您的代码似乎不完整,因为您从未实际声明变量 userDto 也未对其进行初始化。但是,我怀疑问题的解决方案是确保为循环的每个迭代初始化一个新的 UserDto POJO。像这样的事情:

for (User userDetails: user) {
    UserDto userDto = new UserDto();     // CRITICAL
    userDto.setUsername(userDetails.getUsername());
    userDto.setEmail(userDetails.getEmail());
    userDto.setPassword(userDetails.getPassword());

    arr.add(userDto);
}

当前您最终获得同一用户的多个副本的原因是您重复使用相同的 UserDto 对象,只是在每次迭代期间更改其值。

关于java - 添加到数组对象更改相同的值java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42503545/

相关文章:

java - android.app.RemoteServiceException : Bad notification posted on huawei Y6

java - 在 libgdx 游戏中将 GoogleMap 显示为 fragment

java - java 集合中计数出现次数的优雅方法

java - 聚焦并跟随 Swing 中的物体 JPanel

javascript - 返回数组中带有父元素的单个子元素

xml - Bash 将 XML 解析为数组

javascript - 使用 forEach 循环循环遍历一系列数字,并将任何包含整数 1 的数字替换为 "Beep"

Java 8 函数接受 List<V> 并返回 HashMap<K, List<V>>

java - java 中的 Collections.sort 对于任何类

java - 在大型迭代中划分循环