Java中怎么让list里的数据根据类别打印出来 10C

图片说明

我们要求做一个图书馆类的程序,我的做法是对象是图书,然后图书馆就是ArrayList,即把图书对象放进ArrayList。现在的问题是有一个要求是要我们根据作者或者category来打印出所有的图书。即如果按照category打印,一个category相同的所有图书打印过后再打印下个类型的图书。求教大佬怎么实现这个功能

5个回答


public class test {
@Test
public void testStream(){
ArrayList books = new ArrayList<>();
books.add(new Book("1","1","1"));
books.add(new Book("2","2","2"));
books.add(new Book("3","3","3"));
books.add(new Book("4","4","4"));
String category = "1";
books.stream().forEach(book -> {
if(book.getCategory().equals(category)){
System.out.println(book);
}
});
}

}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Book{
private String title;
private String category;
private String auth;
}

```**如果继续打印其他的类型 可以做个类型集合 遍历**

大概想法是先建一个书的对像,每本书都通过这个对象new出来,之后建一个图书馆的数据组,把每本书的对象都放到数据组,再将数据组安想要的排序,这里用的是数组自己的排序方法,就是自己实现Comparator就可以了
class Book{
String isbn;
String title;
String author;
String category;
String total_copies;
String available_copies;

}

Public void main(){
List library = new ArrayList();
Book book = new Book();
book.isbn= ’730206…..’;
book.title = ‘Data Stru…’;
………..
library.add(book);
Book book1 = new Book();
book1.isbn= ’730206…..’;
book1.title = ‘Data Stru…’;
………..
library.add(book1);

Arrays.sort(library, new MyComprator()); //使用指定的排序器,进行排序
for(int i=0;i<library.size();I++) //输出排序结果
System.out.println(library.get(i).isbn +”,”+library.get(i).title………………);
}

class MyComprator implements Comparator {
public int compare(Object arg0, Object arg1) {
Book t1=(Book)arg0;
Book t2=(Book)arg1;
if(t1.cuthor != t2.cuthor)
return t1.x>t2.x? 1:-1;
else
return t1.y>t2.y? 1:-1;
}
}

图书类别和图书应该是分为两张表的,即作为两个类。要求的是分别依次打印出一个图书类中的所有的图书。那么,就可先获取所有图书类别和所有图书类的图书数据。再将对所有图书类别进行第一层循环,将所有图书类的图书数据作为第二层循环(进行和第一层循环的类别进行匹配,得出此类的图书数据),最终打印即可

先建立一个作者集合结构{作者名称:[书]} HashMap
遍历list,判断作者集合中书否存在此作者,不存在将添加进作者集合。存在将其追加至对应的集合。
在遍历最终集合输出。
代码:

package com.springcloud.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 开发公司:青岛海豚数据技术有限公司
 * 版权:青岛海豚数据技术有限公司
 * <p>
 * test
 *
 * @author 刘志强
 * @created Create Time: 2019/5/5
 */
public class test {
    public static void main(String[] a) {
        // 创建list集合
        List<Shu> list = new ArrayList<>();
        Shu shu = new Shu("罗贯中","三国演义", "1");
        Shu shu1 = new Shu("吴承恩","西游记", "5");
        Shu shu2 = new Shu("曹雪芹","红楼梦", "1");
        Shu shu3 = new Shu("施耐庵","水浒传", "2");
        Shu shu4 = new Shu("吴承恩","图书1", "3");
        Shu shu5 = new Shu("施耐庵","图书1", "1");
        Shu shu6 = new Shu("罗贯中","图书2", "3");
        Shu shu7 = new Shu("曹雪芹","图书3", "2");
        list.add(shu);
        list.add(shu1);
        list.add(shu2);
        list.add(shu3);
        list.add(shu4);
        list.add(shu5);
        list.add(shu6);
        list.add(shu7);


        // 创建最终结构集合
        Map<String,List<Shu>> map = new HashMap<>();
        list.forEach(shu8 -> {
            // 设置开关函数 on
            final boolean[] on = {true};
            map.forEach((key,value) -> {
                if (key.equals(shu8.getAuthor())) {
                    value.add(shu8);
                    on[0] = false;
                }
            });
            // 如果on[0]还为true 证明map中还不存在此作者, 追加此作者
            if (on[0]) {
                List<Shu> list1 = new ArrayList<>();
                list1.add(shu8);
                map.put(shu8.getAuthor(), list1);
            }
        });

        // 遍历map
        map.forEach((key,value) -> {
            value.forEach(shu9 -> {
                System.out.println(shu9.toString());
            });
        });


    }


    static class Shu {
        Shu(String author,String title,String category ) {
            this.author = author;
            this.title = title;
            this.category = category;
        }

        private String author;
        private String title;
        private String category;

        public String getAuthor() {
            return author;
        }

        public void setAuthor(String author) {
            this.author = author;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getCategory() {
            return category;
        }

        public void setCategory(String category) {
            this.category = category;
        }

        @Override
        public String toString() {
            return "Shu{" +
                    "author='" + author + '\'' +
                    ", title='" + title + '\'' +
                    ", category='" + category + '\'' +
                    '}';
        }
    }
}

运行输出结果如下

Shu{author='吴承恩', title='西游记', category='5'}
Shu{author='吴承恩', title='图书1', category='3'}
Shu{author='罗贯中', title='三国演义', category='1'}
Shu{author='罗贯中', title='图书2', category='3'}
Shu{author='曹雪芹', title='红楼梦', category='1'}
Shu{author='曹雪芹', title='图书3', category='2'}
Shu{author='施耐庵', title='水浒传', category='2'}
Shu{author='施耐庵', title='图书1', category='1'}
        // Book对象 : category 属性 , getter/setter , toString
        bookList.stream().collect(Collectors.groupingBy(Book::getCategory)).forEach((category,books) -> {
            System.out.println("----------" + category + "----------");
            books.forEach(System.out::println);
        });
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐