【问题标题】:Find object from ArrayList<Object> for same object.value - Java 8从 ArrayList<Object> 中查找相同 object.value 的对象 - Java 8
【发布时间】:2020-10-27 09:37:18
【问题描述】:

我需要从ArrayList&lt;Object&gt; 中找到具有相似object.trackingId 的对象。

例如:

ArrayList<Ilist> ilistArray = new ArrayList<>();
ilistArray.addAll(...); // array is filled with Ilist objects
class Ilist {
    String name;   
    String trackingId;
    String place;
    // Et cetera
}

我需要从ilistArray 中找到具有相似trackingId 的那些对象。

【问题讨论】:

  • 您的意思是要查找重复项列表,或者只是根据值从列表中获取一些对象?
  • 是的,我想获取列表中跟踪 ID 相同的对象。
  • 这能回答你的问题吗? Identify duplicates in a List
  • 使用set 查找重复的对象。
  • 不,我不想找到重复的对象。我想找到具有相同跟踪 id 的对象,即对象参数之一和其他参数值可能不同。

标签: java list arraylist java-8


【解决方案1】:

如果要返回具有匹配值的 first 元素,则需要编写一个以列表作为第一个参数,将要查找的值作为第二个参数的方法,即:

  • 遍历列表
  • 对于每个元素,检查(使用 if 语句)值是否等于您的方法参数
  • 如果匹配,立即返回。

【讨论】:

    【解决方案2】:

    ilistArray.stream().filter(ilist-ilist.tracking_id.equals(the-given-tracking-id)).collect(Collectors.toList()) - 这能回答你的问题吗?

    演示:

    package com.stackoverflow;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Prob10 {
    
        public static void main(String[] args) {
            ArrayList<Ilist> ilistArray = new ArrayList<Ilist>();
            ilistArray.add(new Ilist("Amit", "tid1", "Kolkata"));
            ilistArray.add(new Ilist("Ajay", "tid1", "Durgapur"));
            ilistArray.add(new Ilist("Bishnu", "tid2", "Bangalore"));
            ilistArray.add(new Ilist("Vineet", "tid3", "Noida"));
    
            List<Ilist> resultListArray = new ArrayList<Ilist>();
    
            resultListArray = ilistArray.stream().filter(ilist -> ilist.tracking_id.equals("tid1"))
                    .collect(Collectors.toList());
            System.out.println(resultListArray);
        }
    }
    
    class Ilist {
        String name;
        String tracking_id;
        String place;
    
        Ilist(String n, String id, String pl) {
            this.name = n;
            this.tracking_id = id;
            this.place = pl;
        }
    }
    

    【讨论】:

    • 伙计们...解释更多:我有一个数组列表持有 Ilist 对象。我需要找到那些具有相似 trackingId 的对象...希望你能找到我。
    • 好的,你按照我上面的解释试过了吗......你可以传递你需要的跟踪 id 替换“tid_2001”,就像在 sn-p 中一样......它应该会给你结果。
    • Aniruddha Sardar :我只有 ilistArray,需要将这些对象收集到另一个 ilistArray 中,其中 trackingId 相似。
    • 可能我无法理解这个问题 - 如果可以让您更清楚,请查看更新的答案。
    【解决方案3】:

    您可以通过映射来执行此操作。 trackingId 作为键。

    public static Map<String,List<Ilist>> groupById(List<Ilist> iListArray){
            //same trackingId store to same List
            Map<String, List<Ilist>> trackIdMap=new HashMap<>();
            for(Ilist ilist:iListArray){
                trackIdMap.computeIfAbsent(ilist.trackingId, trackId -> new ArrayList<>()).add(ilist);
            }
            return trackIdMap;
    }
    

    【讨论】:

      【解决方案4】:

      给定 ilistArray,此方法返回具有相同 trakingId 的所有 Ilist 对象的映射:

      public Map<String,List<Ilist>> mapTrakingId(List<Ilist> ilistArray){
          Map<String,List<Ilist>> result = new HashMap<>();
          for(Ilist i : ilistArray) {
              if(result.containsKey(i.trakingId)) {
                  result.get(i.trakingId).add(i);
              }else {
                  List<Ilist> iList = new ArrayList<>();
                  iList.add(i);
                  result.put(i.trakingId, iList);
              }
          }
          return result;
      }
      

      或使用 Java 流:

      Map<String,List<Ilist>> trakingIdMap = ilistArray.stream()
                      .collect(Collectors.groupingBy(i -> i.trakingId));
      

      【讨论】:

      • @Ashwinee 我用您的说明更新了我的答案,如果有用请点赞!
      【解决方案5】:
      for (Ilist il : ilistArray) {
              List<Ilist> sameTrackingIdList = ilistArray.stream()
                      .filter(d -> d.getTrackingID().equals(il.getTrackingID())).collect(Collectors.toList());
      
              ilistMap.put(il.getTrackingID(), sameTrackingIdList);
      
          }
      This code snippet resolved my issue. Thank you all. :)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 2015-08-13
        • 1970-01-01
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        相关资源
        最近更新 更多