stream与简单Lambda的使用

将list集合去空
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//.filter(o -> !o.isEmpty)过滤对象是空的,collect收集(Collectors.toList)将结果转化为List
List<String> collect = strings.stream().filter(o -> !o.isEmpty()).collect(Collectors.toList());
'forEach' 来迭代流中的每个数据
//生成随机数
Random random = new Random();
//.ints().limit(10)生成10个随机数.forEach遍历输出
random.ints().limit(10).forEach(System.out::println);
distinct不同的(去重)
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//以map的形式映射对象,distinct()去重,collect收集(Coolectors.toList)收集转换成List集合
List<Integer> collect = numbers.stream().map(o -> o*2).distinct().collect(Collectors.toList);
计算是空的集合的个数
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
 //过滤是空的集合个数
Long count = strings.stream().filter(0 -> o.isEntry()).count();
对随机数进行过滤
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

使用lambda表达式

//传统用法
   String[] atp = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka",
                "David Ferrer","Roger Federer",
                "Andy Murray","Tomas Berdych",
                "Juan Martin Del Potro"};

        List<String> players = Arrays.asList(atp);

        for (String player : players) {
            System.out.println("player:"+player);
        }
 //lambda 表达试以及函数操作(function operation)
players.forEach((player -> System.out.println(player)));
// 在java8中使用双冒号操作符(double colon operator)
 players.forEach(System.out::println);
lambda表达式的简单例子:

// 1. 不需要参数,返回值为 5
() -> 5
 
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
 
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
 
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
 
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
匿名内部类
// 使用匿名内部类
btn.setOnAction(new EventHandler<ActionEvent>() {
          @Override
          public void handle(ActionEvent event) {
              System.out.println("Hello World!"); 
          }
    });
 
// 或者使用 lambda expression
btn.setOnAction(event -> System.out.println("Hello World!"));
lambdas 来实现 Runnable接口 的示例:
// 1.1使用匿名内部类
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world !");
    }
}).start();
 
// 1.2使用 lambda expression
new Thread(() -> System.out.println("Hello world !")).start();
 
// 2.1使用匿名内部类
Runnable race1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world !");
    }
};
 
// 2.2使用 lambda expression
Runnable race2 = () -> System.out.println("Hello world !");
 
// 直接调用 run 方法(没开新线程哦!)
race1.run();
race2.run();

使用匿名内部类根据name排序players

  String[] players = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka", "David Ferrer",
                "Roger Federer", "Andy Murray",
                "Tomas Berdych", "Juan Martin Del Potro",
                "Richard Gasquet", "John Isner"};
   //使用匿名内部类根据name排序players Comparators 比较器
        Arrays.sort(players, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {

                return o1.compareTo(o2);
            }
        });
 //使用lambdas表达式可以通过以下方法实现
        //使用lambda expression 排序players
        Comparator<String> sortByName = ((String o1, String o2) -> (o1.compareTo(o2)));
        Arrays.sort(players,sortByName);

        //也可以采用一下形式
        Arrays.sort(players,((String s1,String s2) -> (s1.compareTo(s2))));
  //使用匿名内部类根据surname 排序 players
        Arrays.sort(players, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.substring(o1.indexOf(" ")).compareTo(o2.substring(o1.indexOf(" ")));
            }
        });

        //使用lambda 表达式排序,根据surname
        Arrays.sort(players,(String s1,String s2) -> (s1.substring(s1.indexOf(" ")).compareTo(s2.substring(s2.indexOf(" ")))));
  //使用匿名内部类根据 name lenght 排序 players

        Arrays.sort(players, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o1.length() - o2.length());
            }
        });
//        使用 lambda expression 排序,根据 name lenght
        Arrays.sort(players,(String s1,String s2) -> (s1.length() -s2.length()));

        //根据最后一个字母排序
        Arrays.sort(players,(String s1, String s2) -> (s1.charAt(s1.length()-1)) - s2.charAt(s2.length()-1));
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容