Interface Either<L,R>
- Type Parameters:
L- left type (typically error) - 左类型(通常为错误)R- right type (typically success) - 右类型(通常为成功)
- All Known Implementing Classes:
Either.Left, Either.Right
Either Monad - Represents one of two possible values (Left or Right)
Either Monad - 表示两种可能值之一(Left 或 Right)
A sealed type that contains either a Left value (typically for errors) or a Right value (typically for success). By convention, Right is the "happy path".
一个密封类型,包含 Left 值(通常表示错误)或 Right 值(通常表示成功)。 按照惯例,Right 是"正常路径"。
Features | 主要功能:
- Type-safe error handling - 类型安全的错误处理
- Right-biased operations - Right 倾向的操作
- Monadic operations (map, flatMap) - Monad 操作
- Folding/pattern matching - 折叠/模式匹配
- Swap operation - 交换操作
Usage Examples | 使用示例:
// Creating Either values
Either<String, User> success = Either.right(user);
Either<String, User> error = Either.left("User not found");
// Returning from methods
public Either<String, User> findUser(Long id) {
User user = userRepository.findById(id);
return user == null
? Either.left("User not found: " + id)
: Either.right(user);
}
// Using the result
findUser(1L)
.map(User::getName)
.fold(
error -> log.error(error),
name -> log.info("Found: " + name)
);
Security | 安全性:
- Thread-safe: Yes (immutable) - 线程安全: 是 (不可变)
- Null-safe: Allows null values - 空值安全: 允许 null 值
- Since:
- JDK 25, opencode-base-functional V1.0.0
- Author:
- Leon Soo www.LeonSoo.com
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic final classLeft - Represents the left case (typically error) Left - 表示左情况(通常为错误)static final classRight - Represents the right case (typically success) Right - 表示右情况(通常为成功) -
Method Summary
Modifier and TypeMethodDescription<L2,R2> Either <L2, R2> Transform both sides 转换两侧的值default booleanCheck if this is a Right containing the given value.default booleanCheck if this is a Right and the predicate matches the value.filterOrElse(Predicate<? super R> predicate, Supplier<? extends L> orElse) Filter the Right value with a predicate, converting to Left if it fails.Transform the Right value to another Either 将 Right 值转换为另一个 Either<T> TFold both cases to a single result 将两种情况折叠为单一结果default booleanCheck if this is a Left (vacuously true) or the predicate matches the Right value.getLeft()Get the Left value if present 获取 Left 值(如果存在)Get Right value or default if Left 获取 Right 值或默认值(如果是 Left)getRight()Get the Right value if present 获取 Right 值(如果存在)booleanisLeft()Check if this is a Left 检查是否为 LeftbooleanisRight()Check if this is a Right 检查是否为 Rightstatic <L,R> Either <L, R> left(L value) Create a Left Either 创建 Left EitherTransform the Right value 转换 Right 值Transform the Left value 转换 Left 值Return this or other Either if Left 返回本 Either 或其他 Either(如果是 Left)Execute action on Right value 对 Right 值执行操作Execute action on Left value 对 Left 值执行操作static <L,R> Either <L, R> right(R value) Create a Right Either 创建 Right Eitherstream()Convert to Stream: Right becomes a single-element Stream, Left becomes empty.swap()Swap Left and Right 交换 Left 和 RighttoOption()Convert to Option: Right becomes Some, Left becomes None.toTry()Convert to Try: Right becomes Success, Left becomes Failure.default Validation<L, R> Convert to Validation: Right becomes Valid, Left becomes Invalid.
-
Method Details
-
left
Create a Left Either 创建 Left Either- Type Parameters:
L- left type - 左类型R- right type - 右类型- Parameters:
value- left value - 左值- Returns:
- Left Either
-
right
Create a Right Either 创建 Right Either- Type Parameters:
L- left type - 左类型R- right type - 右类型- Parameters:
value- right value - 右值- Returns:
- Right Either
-
isLeft
boolean isLeft()Check if this is a Left 检查是否为 Left- Returns:
- true if Left - 如果是 Left 返回 true
-
isRight
boolean isRight()Check if this is a Right 检查是否为 Right- Returns:
- true if Right - 如果是 Right 返回 true
-
getLeft
-
getRight
-
map
-
flatMap
-
mapLeft
-
bimap
<L2,R2> Either<L2,R2> bimap(Function<? super L, ? extends L2> leftMapper, Function<? super R, ? extends R2> rightMapper) Transform both sides 转换两侧的值- Type Parameters:
L2- new left type - 新的左类型R2- new right type - 新的右类型- Parameters:
leftMapper- transformation for Left - Left 的转换函数rightMapper- transformation for Right - Right 的转换函数- Returns:
- transformed Either
-
getOrElse
-
orElse
-
fold
<T> T fold(Function<? super L, ? extends T> leftMapper, Function<? super R, ? extends T> rightMapper) Fold both cases to a single result 将两种情况折叠为单一结果- Type Parameters:
T- result type - 结果类型- Parameters:
leftMapper- function for Left - Left 的函数rightMapper- function for Right - Right 的函数- Returns:
- folded result
-
swap
-
peek
-
peekLeft
-
filterOrElse
Filter the Right value with a predicate, converting to Left if it fails. 用谓词过滤 Right 值,如果不满足则转换为 Left。If this is a Right and the predicate matches, returns this. If this is a Right but the predicate fails, returns Left with the orElse value. If this is a Left, returns this unchanged.
如果是 Right 且谓词匹配,返回 this。 如果是 Right 但谓词不匹配,返回包含 orElse 值的 Left。 如果是 Left,原样返回。
- Parameters:
predicate- the predicate to test the Right value | 用于测试 Right 值的谓词orElse- supplier for the Left value if predicate fails | 谓词不满足时的 Left 值提供者- Returns:
- filtered Either | 过滤后的 Either
-
toOption
-
toTry
Convert to Try: Right becomes Success, Left becomes Failure. 转换为 Try:Right 变为 Success,Left 变为 Failure。For Left: if the value is a Throwable, it is used directly; otherwise an OpenFunctionalException wrapping it is created.
对于 Left:如果值是 Throwable,则直接使用; 否则创建包装它的 OpenFunctionalException。
- Returns:
- Try containing the Right value or the Left error | 包含 Right 值或 Left 错误的 Try
-
toValidation
Convert to Validation: Right becomes Valid, Left becomes Invalid. 转换为 Validation:Right 变为 Valid,Left 变为 Invalid。- Returns:
- Validation containing the Right value or the Left error | 包含 Right 值或 Left 错误的 Validation
-
stream
-
contains
Check if this is a Right containing the given value. 检查是否为包含给定值的 Right。- Parameters:
value- the value to compare | 要比较的值- Returns:
- true if Right and value equals contained value | 如果是 Right 且值相等返回 true
-
exists
-
forAll
Check if this is a Left (vacuously true) or the predicate matches the Right value. 检查是否为 Left(空真)或谓词匹配 Right 值。- Parameters:
predicate- the predicate to test | 要测试的谓词- Returns:
- true if Left or predicate matches Right value | 如果是 Left 或谓词匹配 Right 值返回 true
-