Java8--Lambda 表达式对两个List的一些简单操作。

本文通过具体案例展示了如何使用Java 8的Stream API来简化集合处理任务,包括条件筛选、属性提取、数据去重及条件判断等操作,旨在帮助开发者更高效地处理集合数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

鉴于最近对List结构的数据类型处理的比较多,就查了一下相关的偷懒方式。

如下示例的目的是将Apple的一组拥有相同标志的对象赋予到Fruit对象里面。赋值的筛选条件为:两者的mark字段相同。

 

第一个实体类

public class Fruit {
    private String id;
    private String name;
    private String type;
    private String space;
    private String mark;
    @Transient
    private List<Apple>appleList;//待会要赋值进去的对象

   //。。。。其他语句偷个懒,节省空间
}

第二个实体类

public class Apple {
    private String id;
    private String name;
    private String work;
    private String prise;
    private String mark;

参考示例:

import com.kernel.entity.Apple;
import com.kernel.entity.Fruit;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

public class Lambda_java8_demo01 {
    public static void main(String[] args) {
        List<Fruit> fruits = new ArrayList<>();
        List<Apple> apples = new ArrayList<>();
        //初始化两组对象
        for (int i = 0; i < 10; i++) {
            Fruit fruit = new Fruit();
            fruit.setId(UUID.randomUUID().toString());
            fruit.setMark("aa" + i);
            for (int j = 0; j < 3; j++) {
                Apple apple = new Apple();
                apple.setId(UUID.randomUUID().toString());
                int m = i + 1;
                apple.setMark("aa" + m);
                apples.add(apple);
            }
            fruits.add(fruit);
        }

        //------------------------------------------------------------------------------------
        
        //第一种赋值操作,将apple中符合条件(mark相等)的对象放入fruits中
//        for (Fruit f:fruits){
//            List<Apple>appleList=apples.stream()
//                    .filter(apple -> apple.getMark().equals(f.getMark()))
//                    .collect(Collectors.toList());
//            f.setAppleList(appleList);
//        }
        System.out.println("条目1---:" + fruits.get(0).getAppleList());


        //第二种赋值操作,将apple中符合条件(mark相等)的对象放入fruits中
        fruits.forEach(fruit -> fruit.setAppleList(
                apples.stream()
                        .filter(apple -> apple.getMark().equals(fruit.getMark()))
                        .collect(Collectors.toList())
        ));

        System.out.println("条目2---:" + fruits.get(0).getAppleList().size());

        //--------------------------------------------------------------------------

        /*
        获取中一组对象的某个属性列,比如获取“apples”中的id组成新的List。
         */
        List<String> appleIdList = apples.stream()
                .filter(apple -> apple.getId() != null)//筛选满足条件的对象,
//                .map(apple -> apple.getId())      //定义反馈的元数据,可以用下面一种方法,
                .map(Apple::getId)                  //定义反馈的元数据,简洁版
//                .map(apple ->  apple.getId()+"对ID进行拼接")//定义并操作反馈的元数据的
                .distinct()                         //对获取到的一组数据去重
                .collect(Collectors.toList());      //重新封装为list

        System.out.println(appleIdList.size());
        
        //------------------------------------------------------------------------------------
        
        /*
        条件判断相关,比如“apples”中是否含有某个apple对象的“mark”属性的值为“aa2”
        anyMatch:部分满足条件
        allMatch:全部满足条件
         */
        boolean flag = apples.stream().anyMatch(apple -> "aa2".equals(apple.getMark()));
        System.out.println("我猜含有aa2 这个mark的属性值:\t" + flag);
        //执行结果:我猜含有aa2 这个mark的属性值:	true

    }
}

 

 

### 回答1: 在 Java 8 中,可以使用 Lambda 表达式来去除两个 List 中重复的元素。 首先,可以使用 Stream API 对第一个 List 进行流式处理,并使用 distinct() 方法去除重复的元素。然后,可以使用 Stream API 对第二个 List 进行流式处理,并使用 filter() 方法过滤掉第一个 List 中已经包含的元素。最后,可以使用 collect() 方法将过滤后的元素收集到一个新的 List 中。 代码示例如下: ``` List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> list2 = Arrays.asList(5, 6, 7, 8, 9, 10, 11, 12, 13, 14); // 去除第一个 List 中的重复元素 List<Integer> list1WithoutDuplicates = list1.stream().distinct().collect(Collectors.toList()); // 过滤掉第一个 List 中已经包含的元素 List<Integer> list2WithoutDuplicates = list2.stream().filter(i -> !list1WithoutDuplicates.contains(i)).collect(Collectors.toList()); // 输出结果 System.out.println(list2WithoutDuplicates); // 输出 [11, 12, 13, 14] ``` ### 回答2: JavaLambda表达式Java 8引入的一种新的特性,它可以简化代码并提高编程效率。要实现两个List去掉重复元素,可以使用Lambda表达式结合Stream API来操作。 首先,我们可以使用Stream的distinct()方法来去除List中的重复元素,它会返回一个去重后的Stream。 然后,将去重后的Stream转换为List,可以使用collect()方法来实现。在collect()方法中,我们可以使用Collectors.toList()来创建一个新的List对象。 下面是一个示例代码: ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class RemoveDuplicatesExample { public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 6, 7, 8); List<Integer> deduplicatedList = list1.stream() .distinct() .collect(Collectors.toList()); List<Integer> deduplicatedList2 = list2.stream() .distinct() .collect(Collectors.toList()); System.out.println("List1去重后的结果:" + deduplicatedList); System.out.println("List2去重后的结果:" + deduplicatedList2); } } ``` 运行以上代码,输出结果分别为:[1, 2, 3, 4, 5]和[4, 5, 6, 7, 8]。可以看到,通过Lambda表达式结合Stream API,成功将两个List中的重复元素去除了。 ### 回答3: 使用lambda表达式可以方便地实现两个list去掉重复元素的操作。具体步骤如下: 1. 定义两个list,分别为list1和list2,包含了重复元素和非重复元素。 2. 使用lambda表达式list1进行去重操作,去重后的结果存储在一个新的list中。 3. 使用lambda表达式list2进行去重操作,去重后的结果存储在一个新的list中。 4. 创建一个新的list,用来存储两个list去重后的合并结果。 5. 使用lambda表达式遍历list1去重后的结果,将每个元素添加到新的list中。 6. 使用lambda表达式遍历list2去重后的结果,将每个元素添加到新的list中。 7. 返回新的list,即为两个list去重后的合并结果。 以下是示例代码: ```java import java.util.ArrayList; import java.util.List; public class RemoveDuplicates { public static void main(String[] args) { List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList<>(); // 添加重复元素和非重复元素到list1和list2 list1.add(1); list1.add(2); list1.add(3); list2.add(3); list2.add(4); list2.add(5); // 使用lambda表达式list1和list2去重 List<Integer> distinctList1 = list1.stream().distinct().collect(Collectors.toList()); List<Integer> distinctList2 = list2.stream().distinct().collect(Collectors.toList()); // 创建一个新的list来存储去重后的合并结果 List<Integer> resultList = new ArrayList<>(); // 使用lambda表达式遍历list1去重后的结果,将每个元素添加到新的list中 distinctList1.forEach(resultList::add); // 使用lambda表达式遍历list2去重后的结果,将每个元素添加到新的list中 distinctList2.forEach(resultList::add); // 打印去重后的合并结果 System.out.println("去重后的合并结果:" + resultList); } } ``` 执行以上代码,输出结果为: 去重后的合并结果:[1, 2, 3, 4, 5] 这说明通过使用lambda表达式,我们成功地将两个list去重,并且合并成了一个新的list,其中不包含重复的元素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值