java - JAVA:将集合中的垂直对象值迭代为水平对象值
问题描述
我有一个对象列表,其中包含接受 BookID、bookseries 和 Format 的 3 个项目,如下所示:
List<BookFormat> book= new ArrayList<BookFormat>();
book.add(1,A,A0);
book.add(1,A,A1);
book.add(1,A,A2);
book.add(2,B,A1);
book.add(2,B,A2);
book.add(3,C,A4);
book.add(4,D,A0);
book.add(4,D,A2);
book.add(4,D,A3);
现在我试图在“BookID”的水平基础上对其进行排序,在该对象上我创建了另一个新的类对象“BookFormatNew”,如果指定的“格式”可用或不可用,则返回真或假。
class BookFormatNew{
String BookID,
String BookSeries,
String A0,
String A1,
String A2,
String A3,
String A4}
如果值可用,则 A0、A1、A2、A3 和 A4 占用“T”,否则占用“F”。
预期的输出结果应该是这样的
List<BookFormatNew> bookNew= new ArrayList<BookFormatNew>();
bookNew.add(1,A,T,T,T,F,F);
bookNew.add(2,B,F,T,T,F,F);
bookNew.add(3,C,F,F,F,F,T);
bookNew.add(4,D,T,F,T,T,F);
如何迭代 BookFormat 的垂直值以获得作为水平值的 NewBookFormat 输出?
感谢您抽出时间!
解决方案
您可以在迭代垂直列表时使用 Map。
HashMap<Integer, BookFormatNew> map = new HashMap<>();
for(BookFormat b: book){
BookFormatNew bfn = map.get(b.getBookId());
if(bfn == null){
// Create new EntryPair and add
BookFormatNew bfn_new = new BookFormatNew(b.getBookId(), b.getBookSeries(), "F","F","F","F","F");
map.put(b.getBookId(), bfn_new);
bfn = map.get(b.getBookId());
}
if(b.getFormat().equals("A0"){
bfn.setA0("T");
}
else if(b.getFormat().equals("A1"){
bfn.setA1("T");
}
else if(b.getFormat().equals("A2"){
bfn.setA2("T");
}
else if(b.getFormat().equals("A3"){
bfn.setA3("T");
}
else if(b.getFormat().equals("A4"){
bfn.setA4("T");
}
map.put(b.getBookId(),bfn); // Puts updated T,F set
}
然后遍历地图并将其添加到新的水平列表(如有必要)或使用地图本身。
推荐阅读
- c# - 我如何知道已完成的活动中下载了哪些文件?
- mysql - 雪花中的 SUBSTRING_INDEX()
- r - 在 Markdown 文档中将页面方向更改为横向会破坏 adobe acrobat 中的书签使用
- javascript - 没有在反应应用程序上使用 jest 和测试库调用模拟函数
- jinja2 - Saltstack - 无法在 Jinja 模板中打印输出
- javascript - 在 React 上使用谷歌脚本时遇到问题
- lstm - NotImplementedError:在 LSTM 模型中
- c# - ASP.NET C# 如何调用集合中的对象以更改 is' 属性?
- c++ - 如果我删除特定的 cout 语句,则会出现 SIGSEGV 错误
- php - 我想在 php mysql 中执行查询之前显示回显