当前位置: 首页 > 知识库问答 >
问题:

对列表中包含的子列表中的数据进行流式处理和筛选

逑阳泽
2023-03-14

我有一个作者集合linkedlist autoren 和一个书籍集合list buecher 。一本书与作者之间的联系是作者的电子邮件地址。

Book类有一个作者电子邮件地址的set:private set autoren

LinkedList<Author> autoren = (LinkedList<Autor>) dataController.getAutoren().stream()
        .filter(s -> buch.getAutoren().contains(s.getEmailadresse()));

for (Author author: autoren) {
    sysout(auther.getName())
}
public class Buch {

private String title;

private String isbnNummer;

private Set<String> autoren;}

如何使用lambda表达式获取所有图书的所有作者列表,并按图书名称进行筛选?

共有1个答案

颛孙航
2023-03-14

您想要什么并不完全清楚,这里有一个可能会有帮助的示例:

package ch.revault.java8;

import static java.lang.String.format;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toMap;

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

public class AppTest {

    @Test
    public void testApp() {
        List<Book> books = getBooks();
        List<Author> authors = getAuthors();

        String yourBookNameFilter = "The martian";

        Map<String, Author> authorsByEmail = authors
                .stream()
                .collect(toMap(a -> a.email, a -> a));

        books.stream()
                .filter(b -> b.title.contains(yourBookNameFilter)) // <-- simple
                                                                   // filter,
                .flatMap(b -> b.authorEmails.stream())
                .distinct()
                .map(e -> authorsByEmail.get(e)) // you could inline
                                                 // authorsByEmail lookup
                .forEach(a -> System.out.println(format("%s, %s", a.firstName, a.lastName)));
    }

    public class Author {
        final String firstName;
        final String lastName;
        final String email;

        public Author(String firstName, String lastName, String email) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.email = email;
        }
    }

    public class Book {
        final String title;
        final String isbnNummer;
        final Set<String> authorEmails;

        public Book(String title, String isbnNummer, Set<String> authorEmails) {
            this.title = title;
            this.isbnNummer = isbnNummer;
            this.authorEmails = authorEmails;
        }
    }

    private List<Author> getAuthors() {
        return asList(
                new Author("f1", "l1", "e1@example.com"),
                new Author("f2", "l2", "e2@example.com"),
                new Author("f3", "l3", "e3@example.com"),
                new Author("f4", "l4", "e4@example.com"));
    }

    private List<Book> getBooks() {
        return asList(
                new Book("The martian", "i1", new LinkedHashSet<>(asList("e2@example.com", "e4@example.com"))),
                new Book("t2", "i2",
                        new LinkedHashSet<>(asList("e1@example.com", "e2@example.com", "e3@example.com"))));
    }
}
 类似资料:
  • 我正在尝试根据另一个列表中存在的值筛选一个列表。我已经经历了其他类似的问题,并试图利用这些来实现我的目标,但无法做到这一点。 列表1由类(L1)的对象组成 列表2由类(L2)的对象组成 因此,筛选后,列表1将不包含,因为该模型与中的不匹配。 我怎么能这么做?

  • 我有“MainClass”类的对象列表,它包含“Question”类的对象列表,它包含Option类的对象列表。如何按“Id”对“MainClass”类列表进行排序,以及按“Id”对“Option”类列表进行排序? 假设,

  • 问题内容: 我有以下清单 我想根据其子列表的长度对列表进行排序。结果应为: 问题答案: 使用和中可用的参数。它指定一个参数的功能,该参数用于从每个列表元素中提取比较键

  • 本文向大家介绍计算Python列表中包含给定元素的子列表,包括了计算Python列表中包含给定元素的子列表的使用技巧和注意事项,需要的朋友参考一下 给定列表中的元素也可以作为另一个字符串出现在另一个变量中。在本文中,我们将查看给定列表中给定流出现了多少次。 随着范围和镜头 我们使用range和len函数来跟踪列表的长度。然后使用in条件查找字符串在列表中作为元素出现的次数。每当满足条件时,初始化为

  • 问题内容: 我有一个看起来像这样的Pandas DataFrame: 而且我想提取仅包含那些行的DataFrame,其中包含的任何行。因此结果应如下所示: 最简单的方法是什么? 供测试用: 问题答案: IIUC重新创建您的df,然后使用with应该比

  • 我有一个Python pandas DataFrame: 我想把一些股票的所有行放在一起,比如。这意味着我想要这样的语法: 既然熊猫不接受上述命令,如何达到目标?