将对象的ArrayList转换为此对象的ArrayList Java中的字符串名称

时间:2010-08-14 14:28:50

标签: java arraylist tostring

我有一个User对象的ArrayList。现在我只需要这些用户名的ArrayList。有没有办法在整个ArrayList上使用toString()并将其转换为String名称的ArrayList而不是在for循环中执行此操作?我还在User类中重写了toString,因此它返回了用户的名字,我尝试了ArrayList <String> names = usersList.toString()但它没有用。

4 个答案:

答案 0 :(得分:7)

您可以使用Google Collections API

执行此操作
List<User> userList = ...;
List<String> nameList = Lists.transform(userList, new Function<User, String>() {
   public String apply(User from) {
      return from.toString(); // or even from.getName();
   }
});

该库已重命名为Guava。


使用Java 8,使用流和方法引用,即使不使用Guava,您现在也可以实现相同的功能:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class User {

    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class App {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>(Arrays.asList(
                new User("Alan Turing"),
                new User("John von Neumann"),
                new User("Edsger W Dijkstra")
        ));

        List<String> names = users
                .stream()
                .map(User::getName)
                .collect(Collectors.toList());

        System.out.println(names);
    }
}

答案 1 :(得分:5)

Object#toString()返回String,而不是ArrayList。那是你的问题。你真的需要循环它。绝对没有理由反对循环。如果代码以某种方式打扰你,只需将它隐藏在一些实用方法中;)


使用Java 8,您可以使用lambda表达式,流和方法引用来简化代码。

以下

List<User> users = getItSomehow();
List<String> names = new ArrayList<String>();
for (User user : users) {
    names.add(user.getName());
}

然后可以缩短为喜欢

List<User> users = getItSomehow();
List<String> names = users.stream().map(User::getName).collect(Collectors.toList());

顺便说一句,您也可以将for放在一行:

for (User user : users) names.add(user.getName());

然而,初学者可能无法直接理解。

答案 2 :(得分:1)

总而言之:不。你需要的是map函数,你没有Java(但正如BalusC指出的那样)。您可以自己编写类似的东西,但无论如何,最终都会迭代列表中的每个元素。

答案 3 :(得分:0)

public ArrayList< String > toStringList( Collection< MyObject > objectList )
{
    ArrayList< String > stringList = new ArrayList< String >();

    for( MyObject myobj : objectList ) {
        stringList.add( myobj.toString() );
    }

    return stringList;
}

...

ArrayList< String > myStringList = toStringList( objectList );

有。一行,你可以将它重用于你将来拥有的任何对象集合。