我有一个问题
我有两个列表
List<SellableItems> table1 = new ArrayList();
List<SellableItems> table2 = new Arraylist();
在我的可售物品课程中,我有一个名字和价格。
现在我希望将table1中的元素移动到table2。因此,如果我的列表中包含价格为20的啤酒,我可以将其从table1移至table2
答案 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 = beer
和price = 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);