`

Lambda Expressions - Strings, Comparators, Filters

    博客分类:
  • FP
 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2375723

 

IterationStringTest

package chapter3;

import org.junit.Before;
import org.junit.Test;

public class IterationStringTest {

    private String str;

    @Before
    public void setUp() throws Exception {
        str = "Hello, 123, world";
    }

    @Test
    public void test1() {
        str.chars().forEach(ch -> System.out.println(ch));
    }

    @Test
    public void test2() {
        str.chars().forEach(System.out::println);
    }

    private static void printChar(int input) {
        System.out.println((char) input);
    }

    @Test
    public void test3() {
        str.chars().forEach(IterationStringTest::printChar);
    }

    @Test
    public void test4() {
        str.chars().mapToObj(ch -> Character.valueOf((char) ch)).forEach(System.out::println);
    }

    @Test
    public void test5() {
        str.chars().filter(ch -> Character.isDigit(ch)).forEach(ch -> printChar(ch));
    }

    @Test
    public void test6() {
        str.chars().filter(Character::isDigit).forEach(IterationStringTest::printChar);
    }
} 

Console Output


 

CompareTest

package chapter3;

import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class CompareTest {

    private List<Person> personList;

    @Before
    public void setUp() throws Exception {
        personList = Arrays.asList(
                new Person("Alex", 20),
                new Person("Kevin", 27),
                new Person("Darren", 27),
                new Person("Max", 35));
    }

    @Test
    public void test1() {
        System.out.println("sorted in asc");
        personList.stream()
                .sorted((person1, person2) -> person1.ageDifference(person2))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test2() {
        System.out.println("sorted in asc");
        personList.stream()
                .sorted(Person::ageDifference)
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test3() {
        System.out.println("sorted in desc");
        personList.stream()
                .sorted((person1, person2) -> person2.ageDifference(person1))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test4() {
        Comparator<Person> compareAsc = (person1, person2) -> person1.ageDifference(person2);
        Comparator<Person> compareDesc = compareAsc.reversed();

        System.out.println("sorted in asc");
        personList.stream()
                .sorted(compareAsc)
                .collect(Collectors.toList())
                .forEach(System.out::println);

        System.out.println("sorted in desc");
        personList.stream()
                .sorted(compareDesc)
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test5() {
        System.out.println("sorted in asc order by name");
        personList.stream()
                .sorted((person1, person2) -> person1.getName().compareTo(person2.getName()))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test6() {
        System.out.println("sorted in desc order by name");
        personList.stream()
                .sorted((person1, person2) -> person2.getName().compareTo(person1.getName()))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test7() {
        personList.stream()
                .min(Person::ageDifference)
                .ifPresent(youngest -> System.out.println("Youngest: " + youngest));
    }

    @Test
    public void test8() {
        personList.stream()
                .max(Person::ageDifference)
                .ifPresent(oldest -> System.out.println("Oldest: " + oldest));
    }

    @Test
    public void test9() {
        personList.stream()
                .sorted(Comparator.comparing((Person person) -> person.getName()))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test10() {
        Function<Person, String> byName = person -> person.getName();
        personList.stream()
                .sorted(Comparator.comparing(byName))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    @Test
    public void test11() {
        Function<Person, Integer> byAge = person -> person.getAge();
        Function<Person, String> byName = person -> person.getName();

        System.out.println("sorted in asc order by age and name");
        personList.stream()
                .sorted(Comparator.comparing(byAge).thenComparing(byName))
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

    private static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public int ageDifference(Person other) {
            return age - other.age;
        }

        @Override
        public String toString() {
            return String.format("%s - %d", name, age);
        }
    }
}

Console Output


 

CollectorsTest

package chapter3;

import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;

public class CollectorsTest {

    private List<Person> personList;

    @Before
    public void setUp() throws Exception {
        personList = Arrays.asList(
                new Person("Alex", 20),
                new Person("Kevin", 27),
                new Person("Darren", 27),
                new Person("Max", 35));
    }

    @Test
    public void test1() {
        List<Person> resultList = new ArrayList<>();
        personList.stream()
                .filter(person -> person.getAge() > 20)
                .forEach(person -> resultList.add(person));

        // older than 20: [Kevin - 27, Darren - 27, Max - 35]
        System.out.println("older than 20: " + resultList);
    }

    @Test
    public void test2() {
        List<Person> resultList =
                personList.stream()
                        .filter(person -> person.getAge() > 20)
                        .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

        // [Kevin - 27, Darren - 27, Max - 35]
        System.out.println(resultList);
    }

    @Test
    public void test3() {
        List<Person> resultList =
                personList.stream()
                        .filter(person -> person.getAge() > 20)
                        .collect(Collectors.toList());

        // [Kevin - 27, Darren - 27, Max - 35]
        System.out.println(resultList);
    }

    @Test
    public void test4() {
        Map<Integer, List<Person>> resultMap =
                personList.stream()
                        .collect(Collectors.groupingBy(Person::getAge));

        // group by age: {35=[Max - 35], 20=[Alex - 20], 27=[Kevin - 27, Darren - 27]}
        System.out.println("group by age: " + resultMap);
    }

    @Test
    public void test5() {
        Map<Integer, List<String>> resultMap =
                personList.stream()
                        .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));

        // {35=[Max], 20=[Alex], 27=[Kevin, Darren]}
        System.out.println(resultMap);
    }

    @Test
    public void test6() {
        Comparator<Person> byAge = Comparator.comparing(Person::getAge);

        Map<Character, Optional<Person>> resultMap = personList.stream().
                collect(Collectors.groupingBy(person -> person.getName().charAt(0),
                        Collectors.reducing(BinaryOperator.maxBy(byAge))));

        System.out.println("Oldest person of each letter: " + resultMap);
    }

    private static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public int ageDifference(Person other) {
            return age - other.age;
        }

        @Override
        public String toString() {
            return String.format("%s - %d", name, age);
        }
    }
}

Console Output


 
FileDirTest

package chapter3;

import org.junit.Test;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FileDirTest {

    @Test
    public void test1() throws IOException {
        Files.list(Paths.get(".")).forEach(System.out::println);
    }

    @Test
    public void test2() throws IOException {
        Files.list(Paths.get(".")).filter(Files::isDirectory).forEach(System.out::println);
    }

    @Test
    public void test3() throws IOException {
        String[] files = new File(".").list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".java");
            }
        });

        System.out.println(files);
    }

    @Test
    public void test4() throws IOException {
        Files.newDirectoryStream(
                Paths.get("."), path -> path.toString().endsWith(".java"))
                .forEach(System.out::println);
    }

    @Test
    public void test5() throws IOException {
        File[] files = new File(".").listFiles(file -> file.isHidden());
        new File(".").listFiles(File::isHidden);
        Arrays.stream(files).forEach(System.out::println);
    }

    @Test
    public void test6() throws IOException {
        List<File> files = new ArrayList<>();
        File[] filesInCurrentDir = new File(".").listFiles();

        for (File file : filesInCurrentDir) {
            File[] filesInSubDir = file.listFiles();

            if (filesInSubDir != null) {
                files.addAll(Arrays.asList(filesInSubDir));
            } else {
                files.add(file);
            }
        }

        System.out.println("Count: " + files.size());
    }

    @Test
    public void test7() throws IOException {
        List<File> files =
                Stream.of(new File(".").listFiles())
                        .flatMap(file -> file.listFiles() == null ? Stream.of(file) : Stream.of(file.listFiles()))
                        .collect(Collectors.toList());

        System.out.println("Count: " + files.size());
    }
}

Console Output


 

 

 

 

  • 大小: 27.4 KB
  • 大小: 38 KB
  • 大小: 39.1 KB
  • 大小: 32.3 KB
分享到:
评论

相关推荐

    放任Lambda-Lisp 50年Let Over Lambda -- 50 Years of Lisp

    本书旨在突破我们对编程知识的界限。 如果您想知道Lisp甚至编程本身的真正含义,这就是您一直在寻找的书。

    C++ Lambda Story - From C++98 to C++20.pdf

    **C++ Lambda表达式**是C++编程语言中一个强大的特性,从C++11标准开始引入,到C++20标准进一步增强。Lambda表达式允许程序员在代码中定义匿名函数,即没有名称的函数,这极大地提高了代码的灵活性和可读性。本书...

    JAVA 8 Lambda表达式-Lambda Expressions.rar

    `JAVA 8 Lambda Expressions.pdf` 这份文档可能涵盖了以下主题: 1. Lambda 表达式的基本概念和语法 2. 函数式接口及其应用 3. Lambda 表达式与方法引用来实现函数式编程 4. Stream API 和 Lambda 表达式的结合使用...

    Lambda22-DEMO-PC-041012

    Lambda22-DEMO-PC-041012是一个与Lambda工具相关的演示版本,适用于个人计算机。从描述中可以看出,它可能是一款软件或应用,需要通过特定的安装过程来部署。安装注册码899999999XXXXXXXXXXXEXX9CD7XCXBXW8XXC88VX...

    开源项目-mtojek-aws-lambda-go-proxy.zip

    开源项目-mtojek-aws-lambda-go-proxy.zip,mtojek/aws-lambda-go-proxy: Pass Lambda events to the application running on your machine | Debug real traffic locally | Forget about redeployments

    PyPI 官网下载 | cdk-lambda-extensions-0.1.232.tar.gz

    **PyPI 官网下载 | cdk-lambda-extensions-0.1.232.tar.gz** 这个资源是Python开发者常用的工具,源自Python Package Index(PyPI)官方网站。PyPI是Python社区的一个重要组成部分,它提供了众多开源Python库的存储...

    lambda-refarch-mobilebackend, 用于创建移动后端的无服务器参考架构.zip

    lambda-refarch-mobilebackend, 用于创建移动后端的无服务器参考架构 无服务器参考体系结构: 移动后端README Languages Languages | | | | TW TW TW TW TW 。简介移动后端参考架构( 图 ) 演示如何使用 AWS Lambda ...

    Python库 | lambdachain-0.1.tar.gz

    **Python库 | lambdachain-0.1.tar.gz** `lambdachain-0.1.tar.gz` 是一个Python库的压缩包,主要用于利用Lambda函数进行链式操作。在Python编程中,Lambda函数是一种简洁、快速定义单行、匿名函数的方法。`lambda...

    Lambda表达式--凌尘.pptx

    【Lambda 表达式】是 Java 8 中的一项重大新特性,它引入了一种更为简洁的函数式编程风格。Lambda 表达式本质上是一个没有名字的函数,允许我们将代码作为一个对象进行传递。这种功能使得 Java 的语言表达能力得到...

    PyPI 官网下载 | lambda-project-creator-0.0.4.tar.gz

    标题中的"PyPI 官网下载 | lambda-project-creator-0.0.4.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的项目,名为`lambda-project-creator`,版本为0.0.4,且已打包成tar.gz格式。PyPI是Python社区...

    PyPI 官网下载 | cdk-lambda-layer-zip-0.0.4.tar.gz

    标题中的“PyPI 官网下载 | cdk-lambda-layer-zip-0.0.4.tar.gz”表明这是一个从Python Package Index(PyPI)官方源下载的软件包,名为"cdk-lambda-layer-zip",版本号为0.0.4,并且已经被打包成tar.gz格式。...

    aws-lambda-go-api-proxy:lambda-go-api-proxy可以轻松移植使用Go框架编写的API,例如Gin(https

    借助aws-lambda-go-api-proxy,可以轻松运行使用框架编写的Golang API,例如使用AWS Lambda的和Amazon API Gateway编写的框架。 入门 第一步是安装所需的依赖项 # First, we install the Lambda go libraries $ go ...

    PyPI 官网下载 | aws-lambda-rest-api-1.0.7.tar.gz

    标题中的"PyPI 官网下载 | aws-lambda-rest-api-1.0.7.tar.gz"指的是一个在Python Package Index(PyPI)上发布的开源软件包。PyPI是Python开发者发布自己编写的Python模块和库的地方,使得全球的Python用户可以方便...

    Python库 | aws-cdk.aws-lambda-event-sources-0.31.0.tar.gz

    《Python库aws-cdk.aws-lambda-event-sources-0.31.0:构建云原生应用的强大工具》 在当今的IT行业中,云计算已经成为了技术发展的主流趋势,而AWS(Amazon Web Services)作为全球领先的云服务提供商,其提供的CDK...

    aws-lambda-send-ses-email, 使用Amazon发送电子邮件的AWS Lambda函数.zip

    aws-lambda-send-ses-email, 使用Amazon发送电子邮件的AWS Lambda函数 aws-lambda-send-ses-email使用Amazon发送电子邮件的AWS Lambda函数。这个功能的主要目的是提供一个服务器端后端来发送来自 static 网站的电子...

    aws-lambda-local, 在本地运行自动气象站的Lambda函数.zip

    aws-lambda-local, 在本地运行自动气象站的Lambda函数 aws-lambda-local在本地运行 AWS Lambda函数 ! 最轻量的库- 没有外部依赖关系。 少于 200行代码。Windows,Mac和Linux测试 !安装npm install -g aws-lambda-...

    PyPI 官网下载 | lambda-notebook-0.6.8.tar.gz

    《PyPI上的lambda-notebook-0.6.8.tar.gz:Python在云原生环境中的分布式探索》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供用户下载和使用。标题提到的“lambda-notebook-...

    PyPI 官网下载 | lambda-layer-0.0.4.tar.gz

    《PyPI官网下载 | lambda-layer-0.0.4.tar.gz——Python库解析与应用》 PyPI(Python Package Index)是Python社区的核心资源库,它提供了大量的Python库供开发者下载和使用。"lambda-layer-0.0.4.tar.gz" 是一个在...

    Python库 | cdk-lambda-extensions-0.1.99.tar.gz

    《Python库深度解析:cdk-lambda-extensions-0.1.99》 在Python的世界里,库是开发者的重要工具,它们提供了丰富的功能,帮助我们高效地完成各种任务。今天我们将聚焦于一个名为"cdk-lambda-extensions"的Python库...

    Python库 | aws-cdk.aws-lambda-python-alpha-2.5.0a0.tar.gz

    《Python库aws-cdk.aws-lambda-python-alpha-2.5.0a0:构建云基础设施的利器》 在IT行业中,云计算已经成为了不可或缺的一部分,它为开发者提供了强大的计算能力和存储资源,极大地推动了软件开发的效率。而在众多...

Global site tag (gtag.js) - Google Analytics