簡體   English   中英

從 java 中的 ArrayList 中刪除替代元素 7

[英]Remove Alternate Elements from ArrayList in java 7

我有一個包含以下元素的字符串數組

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 進入第二個 position,並且在下一次迭代 100 已刪除。

那么有什么方法可以構造一個通用的 function 所以如果十進制值中有更多元素,那么它也可以被刪除。

注意:字符串十進制值將始終位於偶數索引位置。

您可以使用以下方法撥打 go,它對我來說效果很好!

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);
    }
}

在此處輸入圖像描述

還附上我工作區的屏幕截圖。

我們已經遍歷了Listlist.size() -10
所以這個數字不會被推到前面。
當你從0遍歷它到size of the list ,然后如果你刪除一個元素1元素被跳過導致列表的size()減少並且i不斷遞增。
例如 ["5.0","6.1","5.5","100","6.0","6.6"] 當你遍歷 form 0size() - 1
我 = 0:
看到並刪除了5.0 ,然后列表類似於["6.1","5.5","100","6.0","6.6"] ,現在6.1的索引為0

我 = 1:
5.5被刪除然后列表就像
["6.1","100","6.0","6.6"]現在1001索引處。

等等。

但是當從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);
            }

output:

99
100
101

現有答案有效,但比要求的更冗長:

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

您也可以只使用 stream 數組並過濾掉不需要的值。

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]

一個簡單的解決方案可以是:

  1. 實例化一個ArrayList<String>
  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" })));
    }
}

Output:

[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]);
}

對於 Java 8 個用戶,最佳解決方案是使用 Java lambda 表達式

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM