没有任何类型是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吗?相关推荐

  1. 复数类 java_用java写一个复数类Complex

    由于java库中没有提供复数的操作,应同学的需求,写了一个复数的类.有两个构造方法不带参数和带参数的,不带参数时默认实部虚部都为0.还有这些基本的方法,看名字就知道了. public double g ...

  2. 声明银行账户类 java_编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款...

    查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...

  3. 缓存类java_用Java写一个简单的缓存操作类

    前言 使用缓存已经是开发中老生常谈的一件事了,常用专门处理缓存的工具比如Redis.MemCache等,但是有些时候可能需要一些简单的缓存处理,没必要用上这种专门的缓存工具,那么自己写一个缓存类最合适 ...

  4. 设计一个长方形类 java_用java设计一个长方形类,成员变量包括长和宽.方法:计算面积和周长,有相应的set和get方法...

    共回答了17个问题采纳率:100% /** * 长方形类 */ class Rectangle{ /** * 宽 */ private double width; /** * 高 */ private ...

  5. 图形类 java_用java编写一个图形类,该类具有长和高属性,具有求面积的方法

    展开全部 /** * 定义一个图形类 * */ public class Graph { //图形的长高属性 public float length; public float high; publi ...

  6. Java黑皮书课后题第9章:*9.5(使用GregorianCalendar类)Java API中有一个位于包java.util中的类GregorianCalendar

    Java黑皮书课后题第9章:*9.5(使用GregorianCalendar类)Java API中有一个位于包java.util中的类GregorianCalendar 题目 代码 题目 代码 imp ...

  7. process 类 java_编写可执行jar——java的Process类的使用(二)

    你知道怎么在控制台使用ping吗?那你知道怎么在java中使用ping吗? 1.批处理文件 批处理文件大家一定不陌生.接触最多的应该就是tomcat中的start.bat或者start.sh了.bat ...

  8. 有趣现象:同一个java文件中有2个类,一个public,一个无类修饰符,各有一个main函数,谁在前先执行谁!

    发现一有趣现象:同一个java文件中有2个类,一个public,一个无类修饰符,个有一个main函数,谁在前先执行谁! //Detergent.java //Class:Detergent,Clean ...

  9. java 加载类java_深入研究Java类加载机制

    深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比 ...

  10. 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

    编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...

最新文章

  1. 判断一个字符串中出现次数最多的字符
  2. DRF (Django REST framework) 中的视图类
  3. C# 最快的逐一打印斐波那契结果数列的算法
  4. java中class_Java中Class对象详解
  5. socket php验证客户端验证,用Socket发送电子邮件(利用需要验证的SMTP服务器)_php基础...
  6. 两个table怎么对齐_Origin教程|“师兄,图表坐标轴下的分组表格是怎么添加的?”...
  7. OpenCV-Sobel边缘检测
  8. manjaro Linux下使用腾讯会议
  9. 图片显示不出时显示默认图片
  10. OpenEmu for mac(苹果系统原生游戏模拟软件)中文版
  11. Spark大数据面试题1
  12. Openharmony之repo manifest XML文件格式介绍
  13. YARN中的任务队列调度器-容量调度器(Capacity Scheduler)
  14. flash 和 eeprom 区别和关系、nor flash和nand flash区别
  15. pico的学习之路(四)——HC-SR501人体感应模块(树莓派pico实现)
  16. 桑基图绘制的简易操作
  17. Go语言学习之net包(The way to go)
  18. 安装nodejs教程
  19. C语言程序设计(第五版)学习笔记
  20. 【YOLOv7/YOLOv5系列改进NO.50】超越ConvNeXt!Conv2Former:用于视觉识别的Transformer风格的ConvNet

热门文章

  1. 日本财险前瞻2012年IT发展 CDP技术助力异地灾备
  2. Tensorflow 版本切换与 slim 问题
  3. 查看CPU最大支持内存容量
  4. 样本调试之 loadlibrary 报错1114
  5. 1024程序员节日,祝愿所有的程序员节日快乐
  6. Representation Learning with Contrastive Predictive Coding
  7. 身份证OCR识别,居民二代身份证识别第三方数据接口
  8. 阿里云服务器租用费用
  9. 【Questasim】报错001 Failed to access library
  10. 请把西游记倒过来看!