2017-04-30 76 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或者只是输出是整数。我会做出相应的修改

相关问题