简体   繁体   中英

How to check String equality while iterating over two lists?

I have two java classes:

public class MyClass1 {
  private String userId;
  private String userName;
  private List<CustomList1> customList1;

  // getters and setters
  // inner CustomList1 class
}

public class MyClass2 {
  private String userId;
  private List<CustomList2> customList2;

  // getters and setters
  // inner CustomList2 class
}

Now, I have have lists of these classes:

List<MyClass1> classOneList;
List<MyClass2> classTwoList;

In both classOneList and classTwoList lists, object should be sorted with userId ascending. userId in both lists should have same values. What I want to check is that:

  1. Has both lists same size? If not, thow error exception about.
  2. Has every next element from both list the same userId ? If not, throw another exception.

Step 1. I have done with simply if statement.

By prototype, step 2. should look like this:

for (el1, el2 : classOneList, classTwoList) {
  el1.getUserId().isEqualTo(el2.getUserId());
}

Try the below code for your problem.

public class Testing {

    public static void main(String[] args) {
        Map<String, List<String>> map1 = new LinkedHashMap<String, List<String>>();
        List<String> m1l1 = new LinkedList<String>();
        m1l1.add("One");
        m1l1.add("Two");
        m1l1.add("Three");
        m1l1.add("Four");

        map1.put("1", m1l1);

        List<String> m1l2 = new LinkedList<String>();
        m1l2.add("One");
        m1l2.add("Two");
        m1l2.add("Three");
        m1l2.add("Four");

        map1.put("2", m1l2);

        // Add more element into the map1 by creating more list.

        Map<String, List<String>> map2 = new LinkedHashMap<String, List<String>>();
        List<String> m2l1 = new LinkedList<String>();
        m2l1.add("One");
        m2l1.add("Two");
        m2l1.add("Three");
        m2l1.add("Four");

        map2.put("1", m2l1);

        // Add more element into the map2 by creating more list.

        for (Entry<String, List<String>> entry : map1.entrySet()) {
            if (map2.containsKey(entry.getKey())) {
                if (entry.getValue().size() == map2.get(entry.getKey()).size()) {

                } else {
                    System.out.println("UserId are same but list are different for userid: " + entry.getKey());
                }
            }
            else {
                System.out.println("Userid '"+entry.getKey()+"' exists in map1 but is not found in map2");
            }
        }

    }
}

Hope this may help you.

 if(classOneList.size() != classTwoList.size()){
        throw new ErrorException();
    }else{
        classOneList = classOneList.stream().sorted(Comparator.comparing(MyClass1::getUserId)).collect(Collectors.toList());
        classTwoList = classTwoList.stream().sorted(Comparator.comparing(MyClass2::getUserId)).collect(Collectors.toList());
        for (int i = 0; i < classOneList.size(); i++){
            if(!classOneList.get(i).getUserId().equals(classTwoList.get(i).getUserId())){
                throw new AnotherErrorException();
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM