欢迎光临散文网 会员登陆 & 注册

javaLambda表达式在集合中的运用

2022-09-19 09:03 作者:虚云幻仙  | 我要投稿

/**
* 使用Lambda表达式在集合中的运用
*/

public class TestLambda4 {
   public static void main(String[] args) {
       List<Integer> list = new ArrayList<>();
       list.add(1);
       list.add(2);
       list.add(3);
       list.add(4);
       for (int i :
               list) {
           System.out.print(i+", ");
       }
       //使用for-each遍历
       //结果为:1, 2, 3, 4,

       System.out.println();

       list.forEach(new Consumer<Integer>() {
           //使用集合的forEach(Consumer<?> action)方法遍历,consumer消费者,Consumer接口为函数式接口
           @Override
           public void accept(Integer integer) {
               //list.forEach(Consumer)方法会将每个元素传给 Consumer的accept()方法,在accept()方法中规定要对遍历的元素进行什么操作
               System.out.print(integer+", ");
           }
       });
       //结果为:1, 2, 3, 4,
       //作用同for(){},只是将{}的内容放到了Consumer实现类的accept()方法中

       System.out.println();

       list.forEach(a->{
           System.out.print(a+", ");
       });
       //.forEach(Consumer<?> action)的()中直接写表达式()->{},即形参Consumer<?> action = ()->{}
       //accept(T)方法是有参数的,所以用(a)代表参数,{}内用有参的print(a)
       //结果为:1, 2, 3, 4,

       System.out.println();

       list.forEach(System.out::print);
       //进一步简写,引用System.out对象的print(a)方法实现Consumer接口的accept(a)方法
       //结果为:1234

       System.out.println();

       List<String> sts = new ArrayList<>();
       sts.add("a");
       sts.add("b");
       sts.add("c");
       sts.add("b");
       sts.forEach(System.out::print);
       //abcb
       System.out.println();

       //通常删除元素
//        for (Iterator<String> it = sts.iterator();it.hasNext();){
//            if ("b".equals(it.next())){
//                it.remove();
//            }
//        }
//        sts.forEach(System.out::print);
//        //结果:ac
//        System.out.println();


//        sts.removeIf(new Predicate<String>() {
//            //集合的.removeIf(Predicate<?> filter)方法,predicate谓语filter筛选,Predicate接口为函数式接口
//            @Override
//            public boolean test(String s) {
//                //.test()将集合中的每个元素传进来,执行方法体,符合条件返回true删除该元素
//                return "b".equals(s);
//            }
//        });
//        sts.forEach(System.out::print);
//        //结果:ac
//        System.out.println();


//        sts.removeIf(s->"b".equals(s));
       //参数->方法    test()方法需要一个参数并且返回boolean,equals()方法需要一个参数并且返回boolean

       sts.removeIf("b"::equals);
       //简写为 对象"b" :: 方法equals
       sts.forEach(System.out::print);
       //结果:ac
       System.out.println();
   }
}
class TestLambda5{
   //创建容器的元素
   String st;

   public TestLambda5(String st) {
       this.st = st;
   }

   @Override
   public String toString() {
       return st;
   }

   public static void main(String[] args) {
       List<TestLambda5> t5 = new ArrayList<>();
       t5.add(new TestLambda5("d"));
       t5.add(new TestLambda5("b"));
       t5.add(new TestLambda5("c"));
       t5.add(new TestLambda5("a"));

//        t5.sort(new Comparator<TestLambda5>() {
//            @Override
//            public int compare(TestLambda5 o1, TestLambda5 o2) {
//                return o1.st.compareTo(o2.st);
//            }
//        });
//        //使用比较器Comparator
//        t5.forEach(System.out::print);
//        //结果:abcd
//        System.out.println();


       t5.sort((o1,o2)->o1.st.compareTo(o2.st));
       t5.forEach(t-> System.out.print(t.st));
       //结果为:abcd
       //compareTo方法属于形参o1/o2,不能改写成o1::compareTo的形式


   }
}

javaLambda表达式在集合中的运用的评论 (共 条)

分享到微博请遵守国家法律