// 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 );
7条答案
按热度按时间mqxuamgl1#
遍历源列表,如果某个项目与您的条件匹配,则将其从源列表中移除并添加到目标列表中:
或者使用foreach循环:
qzwqbdag2#
如果要移动特定项目:
如果要移动具有特定参数(示例中的价格)的所有物料:
此外,您可以使用lambda来代替foreach循环:
从Java 8:
var itemsToMove = source.stream().filter(i -> i.price == price).collect(Collectors.toList());
从Java 16:
var itemsToMove = source.stream().filter(i -> i.price == price).toList();
du7egjpx3#
这可以完成,请参阅此示例
您可以参考begginers一书中的收集框架
mkshixfv4#
迭代第一个列表,并在价格等于20时添加到第二个列表:
7vhp5slm5#
也许可以使用
stream
将所有值相加,其中name = beer
和price = 20
然后从原始列表中删除所有内容(如果需要)
p5cysglq6#
我假设您想要 filter 第一个列表,并将结果存储到另一个列表中,这样您就拥有了同一个列表的原始版本和修改后的版本。
因为我不知道
SellableItem
类是如何构造的,所以我在示例中使用了一些整数:在这种情况下,
target
将仅包含适用于其值大于20的项。但是,如果您不想保留原始列表并删除存储在第二个列表中的项目,您可以调用
li.removeAll(target);
。jvidinwx7#
以下是两个附加选项:
以及