基于另一个列表的 1 个列表的流过滤器

2023-11-23

我在这个论坛和谷歌搜索后发布我的查询,但无法解决相同的问题。 例如:Link1 Link2 Link3

我正在尝试根据列表 1 中的值过滤列表 2(多列)。

List1:
 - [Datsun]
 - [Volvo]
 - [BMW]
 - [Mercedes]

List2: 
 - [1-Jun-1995, Audi, 25.3, 500.4, 300]
 - [7-Apr-1996, BMW, 35.3, 250.2, 500]
 - [3-May-1996, Porsche, 45.3, 750.8, 200]
 - [2-Nov-1998, Volvo, 75.3, 150.2, 100]
 - [7-Dec-1999, BMW, 95.3, 850.2, 900]

expected o/p:
 - [7-Apr-1996, BMW, 35.3, 250.2, 500]
 - [2-Nov-1998, Volvo, 75.3, 150.2, 100]
 - [7-Dec-1999, BMW, 95.3, 850.2, 900]

Code

// List 1 in above eg
List<dataCarName> listCarName = new ArrayList<>(); 
// List 2 in above eg
List<dataCar> listCar = new ArrayList<>(); 

// Values to the 2 lists are populated from excel

List<dataCar> listOutput = listCar.stream().filter(e -> e.getName().contains("BMW")).collect(Collectors.toList());

在上面的代码中,如果我提供特定值,我可以过滤,但不确定如何检查列表 2 中的汽车名称是否存在于列表 1 中。

希望我面临的问题很清楚,等待指导(我对 Java 还比较陌生,因此如果上面的查询非常基本,请原谅)。

Edit我相信上面提供的 link-3 应该可以解决,但就我而言,它不起作用。可能是因为 list-1 中的值填充为 org.gradle04.Main.Cars.dataCarName@4148db48 ..等 仅当我通过调用 getName 方法在列表 1 上执行 forEach 时,我才能获取人类可读格式的值。


目前尚不清楚为什么你有一个List<DataCarName>放在首位而不是List/Set<String>.

您必须提供的谓词必须检查相应的数据汽车实例是否在列表中存在其名称。

e -> e.getName().contains("BMW")只会检查数据汽车的名称是否包含 BMW,这不是您想要的。那么你的第一次尝试可能是

e -> listCarName.contains(e.getName())

但是由于listCarName is a List<DataCarName> and e.getName()一个字符串(我猜),结果你会得到一个空列表。

您的第一个选项是更改谓词,以便从数据汽车名称列表中获取流,将它们映射到其字符串表示形式,并检查这些名称中的任何一个是否与您当前正在过滤的当前数据汽车实例的名称相对应:

List<DataCar> listOutput =
    listCar.stream()
           .filter(e -> listCarName.stream().map(DataCarName::getName).anyMatch(name -> name.equals(e.getName())))
           .collect(Collectors.toList());

现在,这是非常昂贵的,因为您为数据汽车流管道中的每个实例创建一个流。更好的方法是建立一个Set<String>前面输入汽车名称,然后简单地使用contains作为该集合的谓词:

Set<String> carNames = 
    listCarName.stream()
               .map(DataCarName::getName)
               .collect(Collectors.toSet());

List<DataCar> listOutput =
     listCar.stream()
            .filter(e -> carNames.contains(e.getName()))
            .collect(Collectors.toList());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于另一个列表的 1 个列表的流过滤器 的相关文章

随机推荐

  • 使用存储库的工作单元模式中的依赖项注入

    我想创建一个工作单元类 以类似的方式包装存储库this 我遇到的问题是尝试通过用 IRepository 接口替换示例中的通用存储库来实现依赖项注入 在链接文章的 uow 中 他们使用 getter 来检查存储库是否已实例化 如果没有则实例
  • npm install puppeteer 显示权限被拒绝错误

    我无法安装puppeteer作为项目依赖项 我尝试重新安装节点 有人知道如何解决这个问题吗 运行 Ubuntu 17 10 x64 sudo apt get purge nodejs curl sL https deb nodesource
  • 新手势 - 从左向右滑动 - 作为旧应用程序中 UINavigationController 中“后退”按钮的快捷方式

    iOS 7 采用了一种新手势 即在屏幕上从左向右滑动作为 UINavigationController 中 后退 按钮的快捷方式 我的应用程序似乎没有免费获取此行为 我需要做什么才能让我的 iOS 应用程序 在 Xcode 4 6 3 中为
  • Android Camera2 API 显示处理后的预览图像

    新的 Camera 2 API 与旧的有很大不同 向管道的用户部分显示操纵的相机帧让我感到困惑 我知道有很好的解释使用 Android L 和 Camera2 API 处理相机预览图像数据但显示帧仍然不清楚 我的问题是 在经过一些处理后 在
  • 用传单绘制特定国家的地图

    我想使用该包leaflet用R绘制特定国家的地图 如意大利 西班牙等 我用函数检查了基本示例setView 我尝试为纬度和经度的 arg 给出两个值的向量 m lt leaflet gt addTiles gt Add default Op
  • NUMA 获取当前节点/核心

    我在 Linux 上使用 libnuma 我的线程应该知道它们正在运行的节点 核心 是否有可能以某种方式获取当前线程的节点 核心 我已经浏览了文档 但没有找到这样的功能 我找到了这个解决方案 include
  • 限制完成时的 IntelliJ IDEA 导入建议

    当我输入需要导入的类的名称时 IntelliJ 会亲切地弹出一个建议列表 然而 大多数时候 这些建议是我永远不想导入的东西 尤其是偶然的 比如java awt 有没有办法防止我永远不会导入的包出现在完成列表中 我已经搜索了这些选项 但没有找
  • 使用 MPI_Bcast 进行 MPI 通信

    我正在尝试使用 MPI Bcast 将消息从根节点广播到所有其他节点 然而 每当我运行这个程序时 它总是在开始时挂起 有人知道这是怎么回事吗 include
  • Cassandra 中的高基数和低基数

    我不断遇到这些术语 high cardinality and low cardinality in Cassandra 我不明白它们到底是什么意思 它们对查询有什么影响以及首选是什么 请举例说明 因为这样很容易理解 X 的基数只不过是组成
  • 使用 powershell 将路径永久添加到 Windows 似乎不起作用

    我跟着这个程序为了使用 powershell 永久添加 SumatraPDF 的路径 链接中的最后几个命令旨在检查路径是否确实已添加 当我使用以下命令访问路径时 get itemproperty path Registry HKEY LOC
  • ggplot2:将不连续的持续时间绘制为条形图

    我使用 ggplot 将各种事件绘制为事件开始的日期 x 轴 和开始时间 y 轴 的函数 数据 代码如下 date lt c 2013 06 05 2013 06 05 2013 06 04 2013 06 04 2013 06 04 20
  • 互补误差函数 erfcf() 的可向量化实现

    互补误差函数 erfc 是与标准正态分布密切相关的特殊函数 它经常用于统计学和自然科学 例如扩散问题 其中需要考虑该分布的 尾部 并使用误差函数 erf 因此不适合 ISO C99 标准数学库中提供了互补误差函数 如下所示 erfcf er
  • 并发集合在没有 Thread.Sleep 的情况下消耗了太多 cpu

    两者的正确用法是什么 BlockingCollection or ConcurrentQueue这样您就可以自由地将项目出列 而不会使用线程消耗一半或更多的 CPU 资源 我使用 2 个线程运行一些测试 除非我的 Thread Sleep
  • Angular2 异常:TypeError el.createShadowRoot 不是函数(Safari/Edge)

    我有一个 angular2 应用程序 在 Chrome 和 Firefox 中运行良好 但在 Safari 中我收到此错误 TypeError el createShadowRoot 不是函数 Edge 中也类似 对象不支持属性或方法 cr
  • jQuery 模式对话框未提交我的表单

    我正在使用 jQuery 模态对话框询问用户是否希望提交表单 但是 在用户单击对话框的 提交 按钮后 表单并未提交 如果我再次单击表单提交按钮 它就会提交 我猜这是一个范围问题 我看过其他一些关于它的帖子 但到目前为止已经花了很多时间但没有
  • 如何使用 Cloud Functions for Firebase 预渲染页面以进行 SEO?

    Firebase 文档的 Cloud Functionshere指出这可以使用云函数来完成 预渲染单页应用程序以改善 SEO 这允许您创建动态元标签以在各种社交网络上共享 我有两个问题 有人可以举例说明如何实现预渲染吗 它如何与 Fireb
  • JQuery中点击容器内元素时如何取消容器div触发的点击事件?

    E g div class container div class inside I am not fire when click me div div container click function container do somet
  • @@IDENTITY、SCOPE_IDENTITY()、OUTPUT 和其他检索最后身份的方法

    我见过在插入后检索主键标识字段的值时使用的各种方法 declare t table id int identity primary key somecol datetime default getdate insert into t def
  • 在 Visual Studio 2010 中查找类后代

    我正在 Visual Studio 2010 的对象浏览器中查看一个抽象类 我想找到从这个抽象类派生的所有类 这样我就可以选择最好的一个来在我的应用程序中实现 我没有该程序集的源代码 因此无法使用在文件中查找功能 不幸的是 我似乎根本不知道
  • 基于另一个列表的 1 个列表的流过滤器

    我在这个论坛和谷歌搜索后发布我的查询 但无法解决相同的问题 例如 Link1 Link2 Link3 我正在尝试根据列表 1 中的值过滤列表 2 多列 List1 Datsun Volvo BMW Mercedes List2 1 Jun