列表迭代&使用Java 8 Streams API设置值

时间:2017-03-08 23:01:41

标签: java java-8 java-stream

我正在尝试了解如何使用Java 8 Streams API。

例如,我有这两个类:

basepath = "pathtodir/DataFiles/"
for filename in os.listdir(basepath):
    if filename.endswith(".log"): 
        print(os.path.join("./DataFiles", filename))

        with open(basepath + filename) as openfile:    
            for line in openfile:
            ........

我有十个用户的public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public class UserWithAge { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ,我希望将其转换为具有相同名称且年龄恒定的十个用户的List<User>(例如,27)。如何使用Java 8 Streams API(没有循环,不修改上述类)?

3 个答案:

答案 0 :(得分:5)

您可以使用流的map()功能将列表中的每个User实例转换为UserWithAge实例。

List<User> userList = ... // your list

List<UserWithAge> usersWithAgeList = userList.stream()
        .map(user -> {
                // create UserWithAge instance and copy user name
                UserWithAge userWithAge = new UserWithAge();
                userWithAge.setName(user.getName());
                userWithAge.setAge(27);
                return userWithAge;
         })
         .collect(Collectors.toList()); // return the UserWithAge's as a list

答案 1 :(得分:1)

虽然你可以做到这一点,但你不应该这样做。

List<UserWithAge> userWithAgeList = new ArrayList<UserWithAge>();

userList.stream().forEach(user -> {
                UserWithAge userWithAge = new UserWithAge();
                userWithAge.setName(user.getName());
                userWithAge.setAge(27);
                userWithAgeList.add(userWithAge);
});

答案 2 :(得分:0)

public class ListIteratorExp {

    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("foo");

        Person p2 = new Person();
        p2.setName("bee");

        list.add(p1);
        list.add(p2);

        list.stream().forEach(p -> {
            String name = p.getName();
            System.out.println(name);
        });
    }

}
class Person{
    private String name;

    public String getName() {
        return name;
    }

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

}
output:-
vishal
thakur