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

使用流进行Java JSONObject列表比较

穆城
2023-03-14

我有两个带有JSONObject的ArrayList,我需要比较这两个,并从中找到不同的项,到目前为止,这是我的代码,我收到的输出是不正确的。

公共静态空格main(字符串args[]){

    JSONObject obj1= new JSONObject();
    obj1.put("id", "1DDX");
    obj1.put("crx", "some random string");
    JSONObject obj3= new JSONObject();
    obj3.put("id", "2DDX");
    obj3.put("BMX", "some random data");
    JSONObject obj2= new JSONObject();
    obj2.put("id", "1DDX");
    obj2.put("crx", "some more random string");

    List<JSONObject> list1= new ArrayList<JSONObject>();
    list1.add(obj1);
    list1.add(obj3);
    List<JSONObject> list2= new ArrayList<JSONObject>();
    list2.add(obj2);
    list2.add(obj2);

    List<JSONObject> listcom=list2.stream().filter(json-> list1.contains(json.get("id"))).collect(Collectors.toList());

    System.out.println(listcom);

The output for equal and not equal comparison
[]
The output for 
List<JSONObject> listcom=list2.stream().filter(!json-> list1.contains(json.get("id"))).collect(Collectors.toList());
[{"crx":"some more random string","id":"1DDX"}, {"crx":"some more random string","id":"1DDX"}]

The output what I am looking for is 
{"BMX":"some random data","id":"2DDX"}

共有1个答案

易琛
2023-03-14

如果希望使用java streaming API从两个列表中获取不同的JSONObject,可以将两个列表中的流连接到一个流中,然后对其使用distinct方法。试试这个:

JSONObject obj1= new JSONObject();
obj1.put("id", "1DDX");
obj1.put("crx", "some random string");
JSONObject obj3= new JSONObject();
obj3.put("id", "2DDX");
obj3.put("BMX", "some random data");
JSONObject obj2= new JSONObject();
obj2.put("id", "1DDX");
obj2.put("crx", "some more random string");

List<JSONObject> list1= new ArrayList<JSONObject>();
list1.add(obj1);
list1.add(obj3);
List<JSONObject> list2= new ArrayList<JSONObject>();
list2.add(obj2);
list2.add(obj2);


Stream<JSONObject> jsonStream = Stream.concat(list1.stream(), list2.stream);

List<JSONObject> listcom= jsonStream.distinct().collect(Collectors.toList());

System.out.println(listcom);

编辑:

如果您试图从列表1中检索一个值,如果它对应于列表2中的一个值,则必须映射到该值。试试这个:

List<JSONObject> listcom=list2.stream().filter(json-> list1.contains(json.get("id"))).map(json-> list1.get(json.get("id"))).distinct().collect(Collectors.toList()); 
 类似资料:
  • 问题内容: 我知道有几个这样的问题,但是它们似乎对我没有用。 我有一个列表,5元素乘以50。我想通过对每个元素应用自定义比较功能来对列表进行排序。此函数计算要对元素进行排序的列表的适用性。我创建了两个函数,比较和适应性: 和 然后我尝试通过以下方式致电给他们: 要么 要么 要么 我也尝试了具有相同参数的list.sort()。但是无论如何,函数都不会将列表作为参数,而是作为参数。我不知道为什么,这

  • 我有一个这样的方法: 此方法需要以如下字符串形式返回3个最昂贵项目的产品ID:“item1,item2,item3”。我应该只能使用溪流,我被困在这里了。我应该能够按值对项目进行排序,然后获得产品ID,但我似乎无法使其正常工作。 编辑: 产品ID位于入口类中

  • 我一直在做拼字游戏作业。我需要从列表中读取单词,然后读取每个字符并赋值,最终为每个单词分配一个总分。已经完成了!唷。现在我需要使用比较器将单词从最高分到最低分进行排序。读了很多,还是很迷茫。我知道我可以使用接口,但也有使用lambda表达式的比较器,这是我想去的方向。我只是不知道该怎么做。我需要比较每个单词的sumValue,然后按降序打印单词。 我创建了 2 个循环来读取单词 (i),然后是字符

  • 问题内容: 我的清单包含大小等的集合。我尝试这样做,但似乎不起作用。 我想要的最终结果是。 我可以尝试添加在所有的元素和那种出来再做出新的的。但是,有某种班轮吗? 更新: 这可行,但是可以简化吗? 问题答案: @Eugene的回答很甜蜜,因为番石榴很甜。但是,如果您碰巧在类路径中没有番石榴,这是另一种方式: 首先,我将所有集合映射到一个流中,然后对所有元素进行排序,最后,将整个排序后的流收集到集合

  • 我有以下课程 我正在尝试按贡献者名称和角色名称对ResourceContributor列表进行排序。到目前为止,我得到的是: 我已经尝试使用then比较,但还不知道如何使用它。

  • 我对从流中排序列表感兴趣。这是我正在使用的代码: 我是不是漏了什么?之后不会对列表进行排序。 它应该根据最低值的项目对列表进行排序。 以及打印方法: