How to replace two loops with a stream and keep the same elements in the list

Set <ShipperModel> shippers = baseSiteSerivce.getCurrentBaseSite().getStores().get(0).getShippers();        
Set <ShipperModel> shippers = baseSiteSerivce.getCurrentBaseSite().getStores().get(0).getShippers();        
final List<KeyValueStoreModel> kvList = keyValueStoreService.getKeyValueStoreModelListByCode(HERITAGEUNIT_DELIVERYINSTRUCTION_SHIPVIA);

for (ShipperModel shipperModel : shippers)
{
    for (KeyValueStoreModel keyValueStoreModel : kvList)
    {
        if(shipperModel.getCode().equals(keyValueStoreModel.getCode()))
        {
            // if codes are equals then it will remain in the kvList.
        }
    }
}

I have two item lists, based on the shipper, I want to filter kvlist, and I want to execute like kvlist Remainall (shipper) and want to convert these loops into stream code

Solution

Not ideal, but you can try something similar:

List<KeyValueStoreModel> filtered = kvlist.stream().filter(
      kv -> shippers.stream().anyMatch(
               s -> s.getCode().equals(kv.getCode())
            )
      )
).collect(Collectors.toList());

So we get a stream of kV elements instead of checking whether there are any corresponding elements in the shipper set. Finally, we collect the matching elements into a new list

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>