2017-04-30 71 views
3

我有一個ArrayList包含:[2x,5,6x]。我想擺脫包含「x」的元素,但contains()方法適用於ArrayList中的所有元素。檢查數組中的特定元素是否包含某個字符串。然後刪除元素

我嘗試:

boolean ready = false; 

while(!ready){ 
    if(first element in the array contains "x"){ 
    remove that element 
    Check next element in line 
} 

當檢查了所有的元素,並刪除那些含有「×」,準備設置爲true,並停止循環。 我想輸出只是:[6]。然後將其轉換爲int,而不是String。

編輯: 我不能讓它與ArrayList一起工作,因爲我無法改變ArrayList的內容。所以我把它改成了一個簡單的數組。 該陣列現在是: String [] tokens = ligning2.split(「 - | \ + | \ * | \ /」);

所以令牌數組將保持[2x,5,6x]。那麼如何刪除包含x的元素,使用這種Array而不是Arraylist?

+0

您需要發佈一個新問題並指定最新問題,您最近的編輯不太可能會引起注意。 –

回答

0

當調用List#removeIf時,這將是利用lambda的好機會。

例如:

List<String> list = Arrays.asList("2x", "5", "6x"); 

System.out.println(list); // [2x, 5, 6x] 

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

System.out.println(list); // [5] 

假設有可能保留在List不含有一個「x」多個值,則可以使用一個Stream每個元素映射到它的整數值:

List<Integer> newList = list.stream() 
          .map(Integer::valueOf) 
          .collect(Collectors.toList()); 

整個算法可以凝結成執行以下操作:

List<Integer> newList = list.stream() 
          .filter(element -> !element.contains("x")) 
          .map(Integer::valueOf) 
          .collect(Collectors.toList()); 
+0

@OusmaneMahyDiaw爲什麼在他們已經正確的時候,我在文章中編輯單詞的拼寫? –

+0

道歉,我住在英格蘭,因此我建議這是正確的做法,我想美國的拼寫是不同的。但是請注意,我也編輯了你的代碼,因爲如果我把它保留下來,它就不會編譯。 –

+1

是的,謝謝您添加引號。它的拼寫在美國「利用」;) –

0

最簡單的事情就是使用Stream s。這些都是在Java中8添加你可以用它們在你的情況下,從列表中過濾某些項目,並將其轉換爲整數在一個運行:

List<String> elements = Arrays.asList("2x", "5", "6x"); 
List<Double> result = elements.stream() 
    .filter(entry -> !entry.contains("x")) 
    .map(Double::valueOf) //this assumes that all other entries are valid doubles 
    .collect(Collectors.toList()); 
+0

感謝您的編輯(而不是簡單的downvoting)。在匆忙很是甚至沒有注意到這些錯誤在Java中 – Riiverside

+1

筆記中,我們使用' - >'但是我能看到你了'=>'從(C#),也它不是'Collectors.asList()'但而是'Collectors.toList()'。這可能是我明白的一個錯誤。我編輯過它。 +1。 –

+0

我犯了一個錯誤,不通知它不是整數,但我想用double來做。你能否改變你的代碼,使用double而不是整數?我嘗試將列表更改爲Double,但在'.collect(Collectors.toList())處得到錯誤;' – Bassusour

0
  • 使用迭代器遍歷目錄
  • :每次迭代中,如果當前String包含 「X」 String,從ListIterator.remove();

例如刪除它

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { 
     String value = list.next(); 
     if(value.contains("x"){ 
      iterator.remove(); 
     } 
    } 
+0

正如我對@JacobG所說的,我收到以下錯誤:java.lang.UnsupportedOperationException。我已經看過其他遇到過這個問題的人,但是他們的ArrayList與我的不同,因爲我把它分開了。我的是:'名單 asList = Arrays.asList(ligning2.split( 「 - | \\ + | \\ * | \\ /」));' – Bassusour

+0

的JacobG解決方案不能工作。不要將'Arrays.asList(..)'與'removeIf()'方法混合使用。 'Arrays.asList(..)'產生一個不可修改的ArrayList。使用'new ArrayList()'創建你的列表然後迭代從split得到的數組,以'add(..)'方法填充'ArrayList'。 – davidxxx

+0

我更多的是初學者,所以如果你能向我展示一個例子,我會很激動。 我有包含的字符串變量可以說「2x + 3」。我用split(「 - | \\ + | \\ * | \\ /」)分割它'我如何用'new ArrayList()'而不是'Arrays.asList(..)'來做到這一點?我不確定你的意思是迭代。 – Bassusour

0

可以使用例如一個Iterator:

List<String> list = Arrays.asList("Hello", "xyz", "tkx"); 
Iterator<String> iter = list.iterator(); 
while (iter.hasNext()) { 
    if(iter.next().contains("x")){//check if your element contain x 
     iter.remove();//if yes remove it 
    } 
} 
+1

不錯的經典解決方案^^。 –

+1

哈哈,謝謝@OusmaneMahyDiaw起來,然後向下 –

+0

@YCF_L你將如何避免:UnsupportedOperationException異常的錯誤,我得到什麼?我知道爲什麼它在那裏,但我不知道如何避免它。我試過使用'普通'數組,但我不知道該怎麼做。 – Bassusour

0

您可以使用該程序

package com.anand; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Iterator; 
import java.util.ListIterator; 

public class ArrayListRemove { 
static ArrayList<String> al=new ArrayList<>(Arrays.asList("6x","8","5x")); 
public static void main(String[] args) { 
    Iterator<String> i=al.iterator(); 
    while(i.hasNext()) 
    { 
     if(i.next().toString().contains("x")) 
     { 
      i.remove(); 
     } 
    } 
    ListIterator<String> li= al.listIterator(); 
    while(li.hasNext()) 
    { 
     System.out.println(li.next()); 
    } 

} 

} 

請讓我知道你想創建一個整數的新的ArrayList或者只是輸出是整數。我會做出相應的修改

相關問題