Если вы уверены, что a и b оба присутствуют (как, по-видимому, подсказывает ваш последний вызов get
в решении 1), я думаю, что это довольно просто:
return f(getA().orElseThrow(() -> new NoSuchElementException("a not present")),
getB().orElseThrow(() -> new NoSuchElementException("b not present")));
Если вы не Не уверен, что оба присутствуют, я бы предпочел ваше решение 1. Он использует Optional
лучше всего. Только я бы не назвал get
в конце, а скорее orElse
или что имеет смысл в вашей ситуации, например:
return getA()
.flatMap(a -> getB().map(b -> f(a,b)))
.orElse("Not both present");
Как оказалось, CVSNT пропускает последние 0xa в некоторых файлах, где они нужны cvs2svn. Это можно легко исправить с помощью следующего кода C #:
static void Main(string[] args)
{
foreach (string file in Directory.GetFiles(args[0], "*,v", SearchOption.AllDirectories))
{
using (FileStream sin=File.Open(file, FileMode.Open, FileAccess.ReadWrite))
{
sin.Position=sin.Length-1;
if (sin.ReadByte()==0x40)
{
Console.WriteLine("fixed "+file);
sin.WriteByte(0xa);
}
}
}
}