[英]Remove Alternate Elements from ArrayList in java 7
我有一個包含以下元素的字符串數組
5.0,99,5.5,100,6.0,101
現在我想做什么,我需要刪除字符串格式的所有十進制值,如5.0,5.5
和6.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);
}
}
還附上我工作區的屏幕截圖。
我們已經遍歷了List
從list.size() -1
到0
所以這個數字不會被推到前面。
當你從0
遍歷它到size of the list
,然后如果你刪除一個元素1
元素被跳過導致列表的size()
減少並且i
不斷遞增。
例如 ["5.0","6.1","5.5","100","6.0","6.6"] 當你遍歷 form 0
到size() - 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"]
現在100
在1
索引處。
等等。
但是當從size-1
遍歷到0
時,它會刪除每一個元素,而不用擔心丟失任何decimal
。
自己嘗試一下,您就會知道它為什么有效以及為什么0
到n-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]
一個簡單的解決方案可以是:
ArrayList<String>
。.
演示:
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.