代码之家  ›  专栏  ›  技术社区  ›  shrikant.sharma

如何检查列表中的对象是空的还是空的

  •  1
  • shrikant.sharma  · 技术社区  · 7 年前

    我有点像 List<List<UsersDetails>> userList ,如果我调试以查看它的值 [[]] 即。, List<UsersDetails> 是空的 List<List<UsersDetails>> 也是空的,有没有办法检查 列表用户详细信息; 是空的,没有迭代。

    我试过了 userList.sizeOf , userList.empty() 功能和 userList==null 但所有的接线员都给错了。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Mureinik    7 年前

    如果要检查“outer”列表中的每个元素,必须对其进行迭代 以某种方式 . 不过,Java8的流会对您隐藏这一点,并提供一个稍微干净的语法:

    boolean allEmpty = userList.stream().allMatch(l -> l == null || l.empty());
    
        2
  •  1
  •   rzwitserloot    7 年前

    没有。有:

    if (userList.isEmpty() || userList.get(0).isEmpty()) { ... }
    

    但大多数情况下,如果“这是一个列表列表,其中列表列表包含一个列表,但该列表是空的”这一概念应该被认为是“空的”,则说明您使用了错误的数据结构。你还没解释你用这个做什么模特 List<List<UsersDetails>> 但是,如果您详细说明这一点,java.*中的其他数据类型或番石榴可能更适合。例如,也许 Map<Integer, UsersDetail> 是更好的匹配(将用户的ID映射到他们的详细信息)。

        3
  •  0
  •   dpr    7 年前

    你可以自己创造 List 它只是代表例如。 ArrayList 但是阻止 null 或添加空列表:

    public class NonEmptyUserList implements List<List<UserDetails>>{
    
      private ArrayList<List<String>> mDelegate = new ArrayList<>();
    
      public void add(int index, List<UserDetails> element) {
        if (element == null || element.isEmpty()) {
          return;
        }
    
        mDelegate.add(index, element);
      }
    
      public boolean add(List<UserDetails> element) {
        if (element == null || element.isEmpty()) {
          return false;
        }
    
        return mDelegate.add(e);
      }
    
      public List<UserDetails> set(int index, List<UserDetails> element) {
        if (element == null || element.isEmpty()) {
          return null;
        }
    
        return mDelegate.set(index, element);
      }
    
      public boolean addAll(Collection<? extends List<UserDetails>> c) {
        boolean changed = false;
        for (final List<String> list : c) {
            changed = changed || add(list);
        }
        return changed;
      }
    
      public boolean addAll(int index, Collection<? extends List<UserDetails>> c) {
        boolean changed = false;
        int startIndex = index;
        for (final List<String> list : c) {
            add(startIndex, list);
            changed = changed || (list != null) && !list.isEmpty();
            startIndex++;
        }
    
        return changed;
      }
    
      // delegate all other methods required by `List` to mDelegate
    }
    

    使用这个列表你可以确定没有 无效的 否则将出现空值,因此您可以使用:

    NonEmptyUserList userList = new NonEmptyUserList();
    userList.add(null);
    userList.add(Collections.emptyList());
    userList.isEmpty(); // returns true
    
    List<UserDetails> subList = new ArrayList<>();
    subList.add(null);
    
    userList.add(subList);
    userList.isEmpty(); // returns false
    

    如果您只想处理子列表 无效的 元素也是空的,您还需要扩展上面的实现。不过,这是我目前能想象的唯一不涉及遍历列表元素的解决方案。但我不推荐这种方法。我只是把它写下来告诉你可能发生的事。

    我个人认为@Mureinik使用streams提供的答案是最有利的。

    推荐文章