美文网首页
java基础 : 函数式编程包 vavr

java基础 : 函数式编程包 vavr

作者: 圆企鹅i | 来源:发表于2021-05-30 16:02 被阅读0次

我玩的是java 8 vavr-0.10的版本

maven

        <dependency>
            <groupId>io.vavr</groupId>
            <artifactId>vavr</artifactId>
            <version>0.10.2</version>
        </dependency>

demo

package com.function.functional.vavr;

import io.vavr.Predicates;
import io.vavr.collection.List;
import io.vavr.collection.Seq;
import io.vavr.control.Try;
import io.vavr.control.Validation;

import static io.vavr.API.*;

/**
 * @author zhangxuecheng4441
 * @date 2021/5/30/030 13:32
 */
public class VavrFunction {

    public static void main(String[] args) {

        Integer i = 0;
        Integer null1 = null;
        String of = Match(i).of(
                Case($(0), () -> i + " Match = 0"),
                Case($(0), () -> i + " Match = 000"),
                Case($(1), () -> i + " Match = 1")
        );
        System.out.println("of = " + of);

        String s = Option(null1).toString();
        System.out.println("s = " + s);

        Integer orElse = Option(null1).getOrElse(10);
        System.out.println("orElse = " + orElse);

        Try<Integer> result = Try(() -> 1 / 10);
        result.onFailure(Throwable::printStackTrace);

        result.onSuccess(res -> {
            System.out.println("result = " + res);
        });

        List<Integer> integers = List.ofAll(result);
        Void voidEntity = Match(i).of(
                Case($(Predicates.isIn(1, 3, 5, 7, 9)), o -> run(() -> {
                    System.out.println("o  奇数 = " + o);
                })),
                Case($(Predicates.isIn(0, 2, 4, 6, 8)), o -> {
                    System.out.println("o  偶数 = " + o);
                    return null;
                }),
                Case($(), o -> run(() -> {
                    throw new RuntimeException();
                }))
        );
        PersonValidator personValidator = new PersonValidator();

        Validation<Seq<String>, Person> valid =
                personValidator.validatePerson("John Doe", 30);
        System.out.println("valid = " + valid.get().toString());

        Validation<Seq<String>, Person> invalid =
                personValidator.validatePerson("John? Doe!4", -1);

        System.out.println("invalid = " + invalid.get());

    }


    static class PersonValidator {
        String NAME_ERR = "Invalid characters in name: ";
        String AGE_ERR = "Age must be at least 0";

        public Validation<Seq<String>, Person> validatePerson(String name, int age) {
            return Validation.combine(validateName(name), validateAge(age)).ap((t1, t2) -> {
                return new Person();
            });
        }

        private Validation<String, String> validateName(String name) {
            String invalidChars = name.replaceAll("[a-zA-Z ]", "");
            return invalidChars.isEmpty() ?
                    Validation.valid(name)
                    : Validation.invalid(NAME_ERR + invalidChars);
        }

        private Validation<String, Integer> validateAge(int age) {
            return age < 0 ? Validation.invalid(AGE_ERR)
                    : Validation.valid(age);
        }


    }


}

相关文章

网友评论

      本文标题:java基础 : 函数式编程包 vavr

      本文链接:https://www.haomeiwen.com/subject/qnxmsltx.html