首页 > 解决方案 > 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 输出?

感谢您抽出时间!

标签: javaandroidarrays

解决方案


您可以在迭代垂直列表时使用 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
}

然后遍历地图并将其添加到新的水平列表(如有必要)或使用地图本身。


推荐阅读