【问题标题】:Remove Alternate Elements from ArrayList in java 7从 java 7 中的 ArrayList 中删除备用元素
【发布时间】:2021-01-25 09:05:52
【问题描述】:

我有一个包含以下元素的字符串数组

5.0,99,5.5,100,6.0,101

现在我要做的是删除所有字符串格式的十进制值,例如 5.0,5.56.0

所以我的最终数组应该包含元素99,100,101

所以到目前为止我所做的是显示在下面的代码中

public static String[] deleteElement(String[] str_array) {
        //String[] str_array = {"item1","item2","item3"};
        List<String> list = new ArrayList<String>(Arrays.asList(str_array));
        
        list.remove("5.0");
        list.remove("5.5");
        list.remove("6.0");
        return str_array = list.toArray(new String[0]);
    }

我已经硬编码了这些值,这是非常糟糕的做法,因为将来的值可能会超过当前值,所以我想要一种使用 index 删除的方法。

我也尝试使用 remove(index) 删除,甚至使用 0,2,4 之类的索引定位,但实际发生的是,在删除 5.0 后,元素向左移动,因此 100 进入第二个位置,并在下一次迭代中删除 100。

那么有什么方法可以构造一个通用函数,所以如果十进制值中有更多元素,那么它也可以被删除。

注意: 字符串十进制值将始终驻留在偶数索引位置。

【问题讨论】:

  • 解析 ArrayListn-10 并使用 contains(".") 方法,如果它只是 remove
  • 你好,在我的代码中演示一下
  • 一分钟后好的。我会发布答案

标签: java arrays list arraylist


【解决方案1】:

对于 Java 8 用户, 最好的解决方案是使用 Java lambda 表达式

list.removeIf(element -> element.contains("."));

【讨论】:

    【解决方案2】:

    您也可以只流式传输数组并过滤掉不需要的值。

    String[] v = {"5.0","99","5.5","100","6.0","101"};
    v = Arrays.stream(v)
            .filter(str->!str.contains("."))
            .toArray(String[]::new);
    
    
    System.out.println(Arrays.toString(v));
    

    打印

    [99, 100, 101]
    

    【讨论】:

      【解决方案3】:

      一个简单的解决方案可以是:

      1. 实例化ArrayList&lt;String&gt;
      2. 导航数组并将元素添加到列表中,如果它不包含.
      3. 最后将列表转换为数组并返回。

      演示:

      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      public class Main {
          public static String[] deleteElement(String[] str_array) {
              List<String> list = new ArrayList<>();
              for (String s : str_array) {
                  if (!s.contains(".")) {
                      list.add(s);
                  }
              }
      
              return list.toArray(new String[0]);
          }
      
          public static void main(String[] args) {
              // Test
              System.out.println(Arrays.toString(deleteElement(new String[] { "5.0", "99", "5.5", "100", "6.0", "101" })));
          }
      }
      

      输出:

      [99, 100, 101]
      

      或者,您可以按照您已经在做的方式进行操作,但这不是那么有效的方式。由于您首先将所有元素添加到列表中,然后删除不需要的元素,因此它不如上面建议的那样有效。

      public static String[] deleteElement(String[] str_array) {
          List<String> list = new ArrayList<String>(Arrays.asList(str_array));
          for (String s : str_array) {
              if (s.contains(".")) {
                  list.remove(s);
              }
          }
      
          return list.toArray(new String[0]);
      }
      

      【讨论】:

        【解决方案4】:

        现有答案有效,但比要求的更冗长:

        list.removeIf(str -> str.contains("."));
        

        【讨论】:

        • 感谢您回复并提出解决方案。
        【解决方案5】:

        我们已经从list.size() -1 遍历了List0
        所以这个数字没有被推到前面。
        当您将其从0 遍历到size of the list 时,如果您删除一个元素1,则会跳过该元素,因为列表中的size() 会减少,而i 会不断增加。
        例如["5.0","6.1","5.5","100","6.0","6.6"] 当你从0 遍历到size() - 1
        i = 0 :看到并删除了
        5.0,然后列表类似于 ["6.1","5.5","100","6.0","6.6"],现在 6.1 位于 0 索引处。

        i = 1:
        5.5 被删除,然后列表类似于
        ["6.1","100","6.0","6.6"] 现在100 位于1 索引处。

        等等。

        但是当从size-1 遍历到0 时,它将删除每个元素,而不必担心丢失任何decimal 数字。
        自己尝试一下,您就会知道为什么它会起作用以及为什么 0n-1 不起作用。

                    String arr[] = {"5.0","99","5.5","100","6.0","101"};
                    List<String> list = new ArrayList<String>(Arrays.asList(arr));
                    for(int i = list.size() - 1 ; i >= 0 ; i--) {
                        String number = list.get(i);
                        if(number.contains(".")) {
                            list.remove(number);
                        }
                    }
                    
                    for(String val : list) {
                        System.out.println(val);
                    }
        

        输出:

        99
        100
        101
        

        【讨论】:

        • 这正是我正在寻找的,这很有意义
        【解决方案6】:

        你可以用下面的方法,对我来说效果很好!!

        import java.util.ArrayList;
        import java.util.Arrays;
        import java.util.List;
        
        public class DecimalRemoval {
            public static void main(String[] args) {
                
                List<String> lst = Arrays.asList("5.0","99","5.5","100","6.0","101");
                List<String> resultant = new ArrayList<>(lst.size());
                
                for(String element: lst) {
                    if(! element.contains("."))
                        resultant.add(element);
                }
                
                System.out.println(resultant);
            }
        }
        

        还附上我工作区的屏幕截图。

        【讨论】:

          猜你喜欢
          • 2016-07-23
          • 2013-02-24
          • 2023-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多