Mik*_*e55 4 java arraylist tostring
我有一个User对象的ArrayList.现在我只需要这些用户名的ArrayList.有没有办法toString()在整个ArrayList 上使用并将其转换为String名称的ArrayList而不是在for循环中执行此操作?我也在User类中重写了toString,所以它返回了用户的名字,我试过ArrayList <String> names = usersList.toString()但它没有用.
您可以使用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();
}
});
Run Code Online (Sandbox Code Playgroud)
该库已更名为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);
}
}
Run Code Online (Sandbox Code Playgroud)
的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());
}
Run Code Online (Sandbox Code Playgroud)
然后可以缩短为喜欢
List<User> users = getItSomehow();
List<String> names = users.stream().map(User::getName).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你也可以把它for放在一行:
for (User user : users) names.add(user.getName());
Run Code Online (Sandbox Code Playgroud)
然而,初学者可能无法直接理解.
| 归档时间: |
|
| 查看次数: |
6119 次 |
| 最近记录: |