【发布时间】:2019-10-14 10:11:26
【问题描述】:
首先,这些类是模拟数据类。 我有电话列表,我必须创建一个仅包含电话类型的新列表。为此,我有两个选择,如果有人能以适当的理由解释哪个选项比另一个更好。
Class Phone{
int id;
String type;
Company company;
//Assume all getters setters and constructor is there
}
Class PhoneType{
int id;
String type;
//Assume all getters setters and constructor is there
}
我有一个电话对象列表,如下所示。
List<Phone> phones = new ArrayList<>();
phones.add(new Phone(1,"J7",samsung));
phones.add(new Phone(2,"J5",samsung));
phones.add(new Phone(3,"I5",apple));
我必须从电话列表中获取电话类型列表。为此,我有以下两种方法 第一种方式
List<PhoneType> phoneTypes;
phoneTypes = phones.parallelStream().
map(phone ->new PhoneType(phone.getId(),phone.getType())).
collect(Collectors.toList());
第二种方式
List<PhoneType> phoneTypes = new ArrayList<>();
phones.parallelStream().forEach(
phone -> phoneTypes.add(new PhoneType(phone.getId(), phone.getType())));
如果你有比上述方法更好的方法,也可以参考一下
【问题讨论】:
-
在您的第一个方法中,您使用的地图可能不是预期的方式。虽然您可以将各种副作用塞入其中,但无论如何您都拥有 forEach 的副作用。但请看下面的答案。
-
Phone 可以有一个 PhoneType 成员,而不是复制相同的字段。
-
@swpalmer 是模拟数据
标签: java