从用户的输入中删除arraylist的元素

时间:2016-09-03 18:05:24

标签: java arrays arraylist while-loop element

我需要使用用户的输入从> charac[1:2] [1] "i" "j" 中删除元素。 不是真的要求解决方案,而是更多的指导方向正确。

ArrayList

这就是我的主要课程

public class BFFHelper 
{
    ArrayList<BestFriends> myBFFs;
    Scanner keyboard = new Scanner(System.in);

    public BFFHelper()
    {
        myBFFs = new ArrayList<BestFriends>();
    }

    public void addABFF()
    {
        System.out.println("Enter a first name: ");
        String firstName = keyboard.next();
        System.out.println("Enter a last name: ");
        String lastName = keyboard.next();
        System.out.println("Enter a nick name: ");
        String nickName = keyboard.next();
        System.out.println("Enter a phone number: ");
        String cellPhone = keyboard.next();
        BestFriends aBFF = new BestFriends(firstName, lastName, nickName, cellPhone);
        myBFFs.add(aBFF);            
    }

    public void changeABFF()
    {
        System.out.println("I am in changeBFF");
    }

    public void removeABFF()
    {
        //System.out.println("I am in removeABFF");
        System.out.print("Enter friend's name to remove: ");

        int i = 0;
        boolean found = false;

        while (i<myBFFs.size() && !found)
        {
            if (myBFFs.get(1).getfirstName().equalsIgnoreCase(firstName)) && (myBFFs.get(1).hetlastName().equalsIgnoreCase(lastName))                   
                i++
        }        
    }

    public void displayABFF()
    {
        System.out.println("My Best Friends Phonebook is: ");
        System.out.println(myBFFs);
    }            
}

2 个答案:

答案 0 :(得分:0)

  

如何从用户输入中删除ArrayList的元素?

执行此类操作的一种方法是使用Iterator并在找到匹配时致电remove(),如下所示:

// Iterate over the list myBFFs
for (Iterator<BestFriends> it = myBFFs.iterator(); it.hasNext();) {
    BestFriends bf = it.next();
    if (/*some test here*/) {
        // Found a match to remove
        it.remove();
        // Exit from the loop
        // To be added if and only if you expect only one match otherwise keep iterating
        break;
    }
}

假设您使用Java 8,您可以依靠Stream API来满足这种需求。

如果您要删除第一场比赛

myBFFs.stream().filter(bf -> /*some test here*/).findFirst().ifPresent(myBFFs::remove);

此方法使用List#remove(Object o)删除唯一对象。

如果您要删除所有匹配

 myBFFs.removeAll(
     myBFFs.stream().filter(bf -> /*some test here*/).collect(Collectors.toList())
 );

此方法使用List#removeAll(Collection c)删除对象集合。

答案 1 :(得分:0)

可以使用各种方式从ArrayList中删除元素,例如通过调用list.remove(index);或者,只需指定object to remove

只需研究那些方法的Javadoc。除此之外,还有像 removeAll()这样的调用,可以删除所有提供给调用的参数。

附注:代码中至少有 个错误:

if (myBFFs.get(1).getfirstName().equalsIgnoreCase(firstName)) && (myBFFs.get(1).hetlastName().equalsIgnoreCase(lastName))                   

应该阅读。

if (myBFFs.get(i).getfirstName().equalsIgnoreCase(firstName)) && (myBFFs.get(i).hetlastName().equalsIgnoreCase(lastName))                   

假设你因为一个原因而与我一起循环;并且您不希望始终将元素1与自身进行比较。

虽然我们在这里:你可以改善你的抽象。显然你的程序是关于“人类”的。人类通常有固定的名字,没有他们。意义:拥有一个只代表人类的阶级;使用最终字段获取无法更改的信息。这些字段通过构造函数初始化;而你没有任何制定者。