【问题标题】:How to get elements of a sublist in Java如何在Java中获取子列表的元素
【发布时间】:2020-08-01 17:04:10
【问题描述】:

我已经用谷歌搜索了,但找不到满意的解决方案。

我想保存第一个列表中的所有数字:“列表”。

如果数字可以被 2 整除,我还想将它们保存在第二个列表中:“list2”

我的问题是:

  1. 子列表应该获取哪些参数?我不认为 (list.subList (0, list.size ()) 是正确的;)
  2. 如何在我的 print() 方法中获取子列表“list2”的元素?

我只能将第一个列表作为参数传递

感谢您的帮助!

ArrayList<Integer> list = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>(list.subList(0, list.size()));

    list.add(2);
    list.add(1);
    list.add(4);
    list.add(5);
    list.add(10);

    for (int i = 0; i < list.size(); i++) {

        if (list.get(i) % 2 == 0) {
            list2.add(list.get(i));
        }
    }

    print(list);

}

private static void print(ArrayList<Integer> list) {

    for (Integer integer : list) {
        System.out.println(integer);
    }

}

【问题讨论】:

  • 你可以使用流:List&lt;Integer&gt; list2 = list1.stream().filter(value -&gt; value % 2 == 0).collect(Collectors.toList());
  • 您可以使用两个不同的列表调用 print 方法两次。一个是主列表,第二个是可被 2 整除的子列表。您在这种方法中面临什么问题?

标签: java arraylist sublist


【解决方案1】:

您可以使用 java Streams 来实现这一点。它更干净、更容易使用,而且代码更少。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();

        list.add(2);
        list.add(1);
        list.add(4);
        list.add(5);
        list.add(10);
        
        list2 = list.stream()
            .filter( number -> number%2==0)
            .collect(Collectors.toList());
            
        
        for(int number : list2) {
            System.out.println(number);
        }

    }

}

【讨论】:

    【解决方案2】:
    ArrayList<Integer> list = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>();
    
    list.add(2);
    list.add(1);
    list.add(4);
    list.add(5);
    list.add(10);
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i) % 2 == 0) {
           list2.add(list.get(i));
        }
    }
    
    print(list, list2);
    
    
    
    private static void print(ArrayList<Integer> list, ArrayList<Integer> list2) {
    
        for (Integer integer : list) {
            System.out.println(integer);
        }
        System.out.println("----sublist----");
        for (Integer integer : list2) {
           System.out.println(integer);
        }
    }
    

    print(list);
    print(list2);
    
    private static void print(ArrayList<Integer> list) {
    
        for (Integer integer : list) {
            System.out.println(integer);
        }
    
    }
    

    print(list);
        
        private static void print(ArrayList<Integer> list) {
        
            for (Integer integer : list) {
                System.out.println(integer);
                if(integer%2==0){
                   System.out.println("sub list----"+integer);
                }
            }
        
        }
    

    【讨论】:

    • Thax :) 我只能将第一个列表作为参数传递。有没有办法在不将第二个列表作为参数传递的情况下访问子列表?
    • 您的子列表仅包含可被 2 整除的元素。您可以根据第一个列表得出结果
    • 我添加了三个建议。看看第三个
    【解决方案3】:

    如果您更改子列表的范围。所以 print() 可以评估。

    public class Test {
    
        static ArrayList<Integer> sublist = new ArrayList<Integer>();
        public static void main(String[] args) {
    
            ArrayList<Integer> list = new ArrayList<Integer>();
             list.add(2);
                list.add(1);
                list.add(4);
                list.add(5);
                list.add(10);
    
                for (int i = 0; i < list.size(); i++) {
    
                    if (list.get(i) % 2 == 0) {
                        sublist.add(list.get(i));
                    }
                }
    
                print(list);
    
            }
    
            private static void print(ArrayList<Integer> list) {
    
                for (Integer integer : list) {
                    if(sublist.contains(integer))
                    System.out.println(integer);
                }
    
            }
    
    }
    

    【讨论】:

      【解决方案4】:

      全局声明列表。并将第一个列表作为参数发送。在 print 方法中打印子列表。

      public class Main {
      
      static ArrayList<Integer> list = new ArrayList<Integer>();
      static ArrayList<Integer> list2 = new ArrayList<Integer>(list.subList(0, list.size()));
      
      public static void main(String[] args) {
      
          list.add(2);
          list.add(1);
          list.add(4);
          list.add(5);
          list.add(10);
      
          for (int i = 0; i < list.size(); i++) {
              if (list.get(i) % 2 == 0) {
                  list2.add(list.get(i));
              }
          }
          
          System.out.println("------------------Orginal List------------------");
          print(list);
          
      }
      
      private static void print(ArrayList<Integer> list) {
          for (Integer integer : list) {
              System.out.println(integer);
          }
          
          System.out.println("------------------Sub List------------------");
          
          for (Integer integer : list2) {
              System.out.println(integer);
          }
      }
      

      输出:

      ------------------Original List------------------                                                                                                            
      2                                                                                                                                                           
      1                                                                                                                                                           
      4                                                                                                                                                           
      5                                                                                                                                                           
      10                                                                                                                                                          
      ------------------Sub List------------------                                                                                                                
      2                                                                                                                                                           
      4                                                                                                                                                           
      10
      

      【讨论】:

      • 嗨,萨姆,谢谢!这行正确吗?: static ArrayList list2 = new ArrayList(list.subList(0, list.size()));我可以将此参数传递给子列表吗?
      • @alvira 是的,你可以通过这个......我的代码已经过测试。否则,如果语句错误,它会抛出编译错误。
      【解决方案5】:

      如果使用 Java 8 或更高版本,我建议使用streaming API

      public static List<Integer> extractEvens(final List<Integer> numbers) {
          return numbers.stream()
              .filter(value -> value % 2 == 0)
              .collect(Collectors.toList());
      }
      

      Ideone demo

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多