Either类java_在Java 8中有相当于Scala的Either吗?
没有任何类型是Java 8,所以你需要自己创建一个或使用一些第三方库。
有可选的存在不难建立这样的功能:
请注意,这不支持将值映射到null,但由于Scala不支持null,因此没有明确定义的行为。一个替代方法是检查这个并立即抛出异常,如果一个函数返回null。也可以实现支持空值的Either或者Optional的变体,尽管这可能会感觉不自然。如果期望的行为是Option [Either [L,R]] anywad,则很容易改变类以支持“无”状态。
final class Either
{
public static Either left(L value) {
return new Either<>(Optional.of(value), Optional.empty());
}
public static Either right(R value) {
return new Either<>(Optional.empty(), Optional.of(value));
}
private final Optional left;
private final Optional right;
private Either(Optional l, Optional r) {
left=l;
right=r;
}
public T map(
Function super L, ? extends T> lFunc,
Function super R, ? extends T> rFunc)
{
return left.map(lFunc).orElseGet(()->right.map(rFunc).get());
}
public Either mapLeft(Function super L, ? extends T> lFunc)
{
return new Either<>(left.map(lFunc),right);
}
public Either mapRight(Function super R, ? extends T> rFunc)
{
return new Either<>(left, right.map(rFunc));
}
public void apply(Consumer super L> lFunc, Consumer super R> rFunc)
{
left.ifPresent(lFunc);
right.ifPresent(rFunc);
}
}
示例用例:
new Random().ints(20, 0, 2).mapToObj(i -> (Either)(i==0?
Either.left("left value (String)"):
Either.right(42)))
.forEach(either->either.apply(
left ->{ System.out.println("received left value: "+left.substring(11));},
right->{ System.out.println("received right value: 0x"+Integer.toHexString(right));}
));
Either类java_在Java 8中有相当于Scala的Either吗?相关推荐
- 复数类 java_用java写一个复数类Complex
由于java库中没有提供复数的操作,应同学的需求,写了一个复数的类.有两个构造方法不带参数和带参数的,不带参数时默认实部虚部都为0.还有这些基本的方法,看名字就知道了. public double g ...
- 声明银行账户类 java_编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款...
查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...
- 缓存类java_用Java写一个简单的缓存操作类
前言 使用缓存已经是开发中老生常谈的一件事了,常用专门处理缓存的工具比如Redis.MemCache等,但是有些时候可能需要一些简单的缓存处理,没必要用上这种专门的缓存工具,那么自己写一个缓存类最合适 ...
- 设计一个长方形类 java_用java设计一个长方形类,成员变量包括长和宽.方法:计算面积和周长,有相应的set和get方法...
共回答了17个问题采纳率:100% /** * 长方形类 */ class Rectangle{ /** * 宽 */ private double width; /** * 高 */ private ...
- 图形类 java_用java编写一个图形类,该类具有长和高属性,具有求面积的方法
展开全部 /** * 定义一个图形类 * */ public class Graph { //图形的长高属性 public float length; public float high; publi ...
- Java黑皮书课后题第9章:*9.5(使用GregorianCalendar类)Java API中有一个位于包java.util中的类GregorianCalendar
Java黑皮书课后题第9章:*9.5(使用GregorianCalendar类)Java API中有一个位于包java.util中的类GregorianCalendar 题目 代码 题目 代码 imp ...
- process 类 java_编写可执行jar——java的Process类的使用(二)
你知道怎么在控制台使用ping吗?那你知道怎么在java中使用ping吗? 1.批处理文件 批处理文件大家一定不陌生.接触最多的应该就是tomcat中的start.bat或者start.sh了.bat ...
- 有趣现象:同一个java文件中有2个类,一个public,一个无类修饰符,各有一个main函数,谁在前先执行谁!
发现一有趣现象:同一个java文件中有2个类,一个public,一个无类修饰符,个有一个main函数,谁在前先执行谁! //Detergent.java //Class:Detergent,Clean ...
- java 加载类java_深入研究Java类加载机制
深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比 ...
- 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...
编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...
最新文章
- 判断一个字符串中出现次数最多的字符
- DRF (Django REST framework) 中的视图类
- C# 最快的逐一打印斐波那契结果数列的算法
- java中class_Java中Class对象详解
- socket php验证客户端验证,用Socket发送电子邮件(利用需要验证的SMTP服务器)_php基础...
- 两个table怎么对齐_Origin教程|“师兄,图表坐标轴下的分组表格是怎么添加的?”...
- OpenCV-Sobel边缘检测
- manjaro Linux下使用腾讯会议
- 图片显示不出时显示默认图片
- OpenEmu for mac(苹果系统原生游戏模拟软件)中文版
- Spark大数据面试题1
- Openharmony之repo manifest XML文件格式介绍
- YARN中的任务队列调度器-容量调度器(Capacity Scheduler)
- flash 和 eeprom 区别和关系、nor flash和nand flash区别
- pico的学习之路(四)——HC-SR501人体感应模块(树莓派pico实现)
- 桑基图绘制的简易操作
- Go语言学习之net包(The way to go)
- 安装nodejs教程
- C语言程序设计(第五版)学习笔记
- 【YOLOv7/YOLOv5系列改进NO.50】超越ConvNeXt!Conv2Former:用于视觉识别的Transformer风格的ConvNet