Java 转换列表<;T>;进入另一个列表<;配对<;五十、 R>&燃气轮机;
将一个列表转换为另一个列表的最佳方法是什么(例如,以Java 转换列表<;T>;进入另一个列表<;配对<;五十、 R>&燃气轮机;,java,list,Java,List,将一个列表转换为另一个列表的最佳方法是什么(例如,以的形式将列表转换为另一个列表),如图所示: 如图所示,有一个源列表是List,它本质上包含一个UserModel和getUserId()方法,这个列表可以是空的,包含一个或多个元素),因此它是任意的。目标是创建另一个列表,其中将包含一对字符串用户ID 这里有一个代码来概述这个问题 List<UserModel> models= getUsers(); List<UserRenderModel> renderModel
的形式将列表转换为另一个列表
),如图所示:
如图所示,有一个源列表是List
,它本质上包含一个UserModel
和getUserId()
方法,这个列表可以是空的,包含一个或多个元素),因此它是任意的。目标是创建另一个列表,其中将包含一对字符串用户ID
这里有一个代码来概述这个问题
List<UserModel> models= getUsers();
List<UserRenderModel> renderModels = new LinkedList<>();
IntStream.range(0, models)
.forEach(idx -> {
UserRenderModel renderModel = new UserRenderModel();
UserModel dataModel = models.get(idx);
if(idx % 2 == 0) {
renderModel.setLeftUserId(dataModel.getUserId());
} else {
renderModel.setRightUserId(dataModel.getUserId());
}
renderModels.add(renderModel);
}
);
List models=getUsers();
List renderModels=new LinkedList();
IntStream.range(0,型号)
.forEach(idx->{
UserRenderModel renderModel=新的UserRenderModel();
UserModel dataModel=models.get(idx);
如果(idx%2==0){
renderModel.setLeftUserId(dataModel.getUserId());
}否则{
renderModel.setRightUserId(dataModel.getUserId());
}
添加(renderModel);
}
);
在这段代码中,您可以看到,如果集合中有一个带有两个对象的
UserModel
,它将创建两个UserRenderModel
,这将添加到renderModels集合中,这是错误的,然而,它应该只是一个UserRenderModel
,您没有提供太多关于UserModel
和UserRenderModel
类的详细信息,但我们假设您有一些方法可以将一个转换为另一个:
private static UserRednerModel toRenderModel(UserModel u) {
// pseudocode, of course:
String leftUserId = getLeftIdFromId(u.getId());
String RIGHTUserId = getRightIdFromId(u.getId());
return new UserRenderModel(leftUserId, rightUserId);
}
有了这样一种方法,我会将UserModel
s的列表流化,将每个列表映射到一个UserRenderModel
,并将其收集到一个新列表中:
List<UserModel> myList = ...;
List<UserRenderModel> result =
myList.stream()
.map(SomeClass::toRenderModel)
.collect(Collectors.toList());
List myList=。。。;
列表结果=
myList.stream()
.map(SomeClass::toRenderModel)
.collect(Collectors.toList());
解决方案是
IntStream.range(0, models.size())
.filter(idx -> idx % 2 == 0)
.forEach(idx -> {
UserModel userModel1 = models.get(idx);
UserModel userModel2 = idx + 1 < models.size() ? models.get(idx + 1) : null;
UserRenderModel renderModel = new UserRenderModel();
renderModel.setLeftUserId(userModel1.getUserId());
renderModel.setRightUserId(userModel2.getUserId());
});
IntStream.range(0,models.size())
.filter(idx->idx%2==0)
.forEach(idx->{
UserModel userModel1=models.get(idx);
UserModel userModel2=idx+1
通常的方法是List#stream
,stream#map
,最后是stream#collect
使用collector#toList
。UserModel
和UserRenderModel
之间的关系是什么?是一对一、成对、滑动窗口还是其他方法?问题更新@PatrickHaugh