添加 2 个对象列表并从最终列表中删除重复的(除了一个字段不同)元素

amar2108

我有一个对象类

class Device{
String name;
String type;
String status;
}

我有 2 个列表 第一个就像{d1,m1,active}, {d2,m2,active},{d3,m3,acticve}

第二个{d2,m2,paused},{d4,m4,paused}

我希望我的最终名单像 {d1,m1,active},{d2,m2,paused},{d3,m3,active},{d4,m4,paused}

我的方法是制作一个 commonName 列表,{d2}然后将列表添加{d1,d2,d2,d3,d4}到总列表中,然后遍历总列表,如果 common deviceName( d2.contains(i.getName())) 匹配,则删除状态为活动的那个(删除我的意思是制作另一个列表和不要添加“活动”对象)。

除了在迭代中使用 contains 之外,是否还有一种有效的方法来执行此操作。将复杂度降低到 o(N)。

厄立特里亚

假设第一个列表中的设备具有唯一名称,您可以在两个列表中流式传输并收集以映射合并,只要在第二个列表中找到相同的名称并选择具有paused作为状态的名称。使用以下类作为示例的示例:

@ToString
@AllArgsConstructor
@Getter
static class Divice {
    private String name;
    private String type;
    private String status;
}

和以下示例列表

List<Divice> list1 = new ArrayList<>();
list1.add(new Divice("d1", "m1", "active"));
list1.add(new Divice("d2", "m2", "active"));
list1.add(new Divice("d3", "m3", "active"));

List<Divice> list2 = new ArrayList<>();
list2.add(new Divice("d2", "m2", "paused"));
list2.add(new Divice("d4", "m4", "paused"));

然后做 :

List<Divice> merged = new ArrayList<>(
        Stream.concat(list1.stream(),list2.stream())
                .collect(Collectors.toMap(Divice::getName,
                                          Function.identity(),
                                          (i,j) -> "paused".equals(i.getStatus()) ? i : j,
                                          LinkedHashMap::new)).values()
);

merged.forEach(System.out::println);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个列表元素分别添加到 2 个列表中?

是否可以在GraphQL查询的最终响应中添加另一个字段?

按元素添加2个列表?

SOLR:将2个字段复制到另一个字段并将过滤器添加到该新字段

将2个数组列表添加到一个2维数组中

在 JavaScript 中的对象列表末尾添加一个元素

比较两个列表并从 list2 中删除第一个匹配的重复项

附加到另一个字段的下拉列表中的 Yii2 表单字段

给定a的列表,请从列表中选择2个元素,将它们组合并添加到新列表中。重复直到新列表与输入列表大小相同

如何在列表中的每个项目中添加一个字符?

为Python列表中的每个元素在4个字符之后添加一个字符串

在列表的每个字典中添加一个元素(列表理解)

按属性对列表进行排序,并在JavaScript中的每个第一个字母更改之前添加一个对象

每2个字符前添加一个字符串

在 firebase 中的数组中添加一个字段而不删除 firebase 中的其他字段

python将2个对象或对象添加到列表

使用linq合并2个列表,并为重复的记录添加字段

比较3个列表之间的值,并将第一个列表中的缺失值添加到其余2个列表中-C#

如何将值添加到odoo many2many字段列中,取决于同一个字段中的另一列?

如何为列表中添加的每个li元素添加一个删除按钮?

Firestore云功能在一个字段中添加多个字段

Symfony在一个字段中形成2种不同的值类型

PHP:比较2个不同的数组/对象。检查另一个字段中是否存在字段值

我需要一键添加和删除2个不同的类到不同的元素。-jQuery

在列表中元素的开头添加 2 个空格

按元素添加2个未对齐列表?

合并共享一个类的2个菜单ID元素,并为该类添加不同的背景

如何在列表中每个字符串的末尾添加一个字符?

如何向列表中的每个字符串添加一个字符串?