我有以下问题。我熟悉使用Java 7进行以下操作的传统方法,但是尝试使用java8流或forEach实现此操作,以提高可读性和减少代码行。
目的:
public class Object {
private String id;
private String userName;
private String address;
private String email;
//getters and setters
}
现在,我有一个如下的对象列表:
List<Object> list = new ArrayList<>();
Object obj = new Object();
obj.setId(12);
obj.setUserName("myName");
obj.setAddress("address");
obj.setEmail("email");
Object obj1 = new Object();
obj1.setId(12);
obj1.setUserName("myName1");
obj1.setAddress("address1");
obj1.setEmail("email1");
list.add(obj);
list.add(obj1);
我还有另一个对象用户:
public class User {
private String userName;
private String address;
private String email;
//getters and setters
}
ResultObject:
public class ResultObject{
private String id;
private List<User> user;
//getters and setters
}
现在,对于列表中的每个对象,我想通过id对它们进行分组,并将相应的电子邮件,地址和用户名保存在User Object中,最后想要一个ID已映射到同一ID下的用户列表的List。
因此,上述示例的ResultObject应该类似于:
id=12
List<User> = {["myname","address","email"],["myname1","address1","email1"]}
任何想法表示赞赏。TIA。
您可以将sample的Collectors.mapping
with groupingBy
和(Sample
而不是Object
)一起使用,以获取List<User>
与id
它们关联的的中间状态,并且它们将每个此类条目映射为ResultObject
as:
List<ResultObject> resultObjects = samples.stream()
.collect(Collectors.groupingBy(Sample::getId,
Collectors.mapping(a -> new User(a.getUserName(), a.getAddress(), a.getEmail()),
Collectors.toList())))
.entrySet().stream()
.map(e -> new ResultObject(e.getKey(), e.getValue()))
.collect(Collectors.toList());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句