将元素从一个数组列表移动到另一个数组

时间:2018-05-16 08:41:00

标签: java arraylist move

我有一个问题

我有两个列表

List<SellableItems> table1 = new ArrayList();
List<SellableItems> table2 = new Arraylist();

在我的可售物品课​​程中,我有一个名字和价格。

现在我希望将table1中的元素移动到table2。因此,如果我的列表中包含价格为20的啤酒,我可以将其从table1移至table2

7 个答案:

答案 0 :(得分:2)

迭代源列表,如果项目符合您的条件,请将其从源列表中删除并将其添加到目标列表中:

for(int i=0; i<table1.size(); i++) {
    if(table1.get(i).price==20) {
        table2.add(table1.remove(i));
    }
}

或者使用foreach循环:

for(SellableItem item : table1) {
    if(item.price==20) {
        table1.remove(item);
        table2.add(item);
    }
}

答案 1 :(得分:1)

迭代第一个列表并在价格等于20时添加到第二个列表:

List<SellableItems> table1 = new ArrayList<>();
List<SellableItems> table2 = new ArrayList<>();

Iterator<SellableItems> itemsIterator = table1.iterator();
while (itemsIterator.hasNext()) {
    SellableItems next = itemsIterator.next();
    if (next.price.equals(20)) {
        table2.add(next);
        itemsIterator.remove();
    }
}

答案 2 :(得分:0)

如果您想移动特定项目:

moveSellableItem(List<SellableItem> source, SellableItem item, List<SellableItem> destination){
    destination.add(item);
    source.remove(item);
}

如果您想移动具有特定参数的所有项目(例如价格):

moveSellableItemWithPrice(List<SellableItem> source, double price, List<SellableItem> destination){
    for(SellableItem item : source){
        if(item.price == price) {
            destination.add(item);
            source.remove(item);
        }
    }
}

答案 3 :(得分:0)

        import java.util.List;
        import java.util.ArrayList;
        public class Details
        {
            public static void main(String [] args)
            {
                //First ArrayList
       List<SellableItems> arraylist1=new ArrayList<SellableItems>();
                arraylist1.add(SellableItems);


                //Second ArrayList
          List<SellableItems> arraylist2=new ArrayList<SellableItems>();
                arraylist2.add(SellableItems);


    arraylist1.addAll(arraylist2);

                }
            }

可以查看此示例

  

你可以参考begginers书中的集合框架

答案 4 :(得分:0)

我假设您要过滤第一个列表并将结果存储到另一个列表中,以便您拥有相同列表的原始版本和修改版本。

由于我不知道你的SellableItem类是如何构造的,所以我使用了一些整数作为我的例子:

// List of random Integers for the example
List<Integer> li = new Random().ints( 100,0,30 ).boxed().collect( Collectors.toList() );
// The list which will contain the results
List<Integer> target;

// A stream (since Java 8) which is filtering for a certain Predicate and
// collecting the result as a list.
target = li.stream().filter( i->i.intValue() > 20 ).collect( Collectors.toList() );

System.out.println( target );

在这种情况下,target只会包含适用于其值大于20的项目。

但是,如果您不想保留原件并删除存储在第二个列表中的商品,则可以拨打li.removeAll(target);

答案 5 :(得分:0)

也许使用stream添加name = beerprice = 20

的所有值
table1.stream().filter((table11) -> (table11.getName().equals("beer") && table11.getPrice() == 20)).forEach((table11) -> {
            table2.add(table11);
        });

然后从原始列表中删除所有内容(如果需要)

table1.removeAll(table2);

答案 6 :(得分:0)

这里有两个附加选项:

Iterator<SellableItem> iter = table1.iterator();
while (iter.hasNext()) {
    SellableItem item = iter.next();
    if (item.getName().equals("beer") && item.getPrice() == 20) {
        iter.remove();
        table2.add(item);
    }
}

Predicate<SellableItem> test = item -> item.getName().equals("beer") && item.getPrice() == 20;
table1.stream().filter(test).forEach(table2::add);
table1.removeIf(test);