以上就是给各位分享Java可选,如果object不为null-返回方法结果,如果为null-返回默认值,其中也会对java如果为null,默认值进行解释,同时本文还将给你拓展asp.net-mvc–检
以上就是给各位分享Java可选,如果object不为null-返回方法结果,如果为null-返回默认值,其中也会对java 如果为null,默认值进行解释,同时本文还将给你拓展asp.net-mvc – 检查DateTime类型的值在视图中是否为null,如果为null则显示为空、c# – Linq结果如果为null则为零、c# – “null如果object为null,则为null;如果object不为null,则为object.member”、DateDiff,如果为null,则使用以前的时间等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Java可选,如果object不为null-返回方法结果,如果为null-返回默认值(java 如果为null,默认值)
- asp.net-mvc – 检查DateTime类型的值在视图中是否为null,如果为null则显示为空
- c# – Linq结果如果为null则为零
- c# – “null如果object为null,则为null;如果object不为null,则为object.member”
- DateDiff,如果为null,则使用以前的时间
Java可选,如果object不为null-返回方法结果,如果为null-返回默认值(java 如果为null,默认值)
是否可以将此代码转换为Java 8可选单行表达式?
long lastPollTime;if (object != null) { lastPollTime = object.getTime();} else { lastPollTime = 0;}
即如果某个对象不为空,我需要调用一个对象方法并返回其结果,否则返回0。Optional.ofNullable().orElse()
不适合,因为它返回相同类型的对象,但是我需要方法调用的结果或一些默认值。
答案1
小编典典几种形式:
long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);long lastPollTime = Optional.ofNullable(object).isPresent() ? object.getTime() : 0;long lastPollTime = object != null ? object.getTime() : 0;
其中,最后一个不使用Optional(因此不能严格回答您的问题!)更易于阅读,运行时开销也较小,因此应优先使用。
可以说,如果您反转选项,它甚至更简单:
long lastPollTime = object == null ? 0 : object.getTime();
…尽管您可能更喜欢默认的默认设置-这是个人喜好的问题。
如果您确实不能使用三元运算符,并且正在执行很多操作,则可以编写自己的实用程序方法:
public <T,U> U mapWithFallback(T obj, Function<T,U> function, U fallback) { if(obj == null) { return fallback; } else { return function.apply(obj); }}
…可称为:
long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);
…或者使用以下方法完全嘲笑您的无三元检查:
public <T,U> U ifElse( Supplier<Boolean> a, Supplier<U> ifTrue, Supplier<U> ifFalse) { if(a.get()) { return ifTrue.get(); } else { return ifFalse.get(); }}long lastPollTime = ifElse( () -> object == null, () -> object.getTime(), () -> 0);
最好完全避免使用null引用,这样就不需要这种检查了,例如使用Null
Object模式。
…或通过编写返回Optional
而不是返回空值的方法。Optional
是一个伟大的阶级;用它。只是不要将某些内容Optional
完全转换为纯文本,这样您就可以立即检查它是否为空。
asp.net-mvc – 检查DateTime类型的值在视图中是否为null,如果为null则显示为空
public ActionResult Details(long id,string owner) { var module = _ownedModuleRepository.GetModuleDetails(id,owner); return View(module); }
我已经在视图中显示了它包含的值如下
<dt>ID</dt> <dd>@Model.Id</dd> <dt>Module ID</dt> <dd>@Model.ModuleId</dd> <dt>Owner</dt> <dd>@Model.Owner</dd> <dt>Module Type</dt> <dd>@Model.TypeName</dd> <dt>Module Kind</dt> <dd>@Model.KindName</dd> <dt>Ownership Start Date</dt> <dd>@Model.Start</dd> <dt>Ownership End Date</dt> <dd>@Model.End</dd> @foreach (var properties in Model.Properties) { <dt>Property Name</dt> <dd>@properties.Name</dd> <dt>Property Value</dt> <dd>@properties.Value</dd> }
目前@ Model.End为null,它是DateTime类型,我在viewmodel中将其设置为可为空.
因为它是null,所以这就是我所看到的
如您所见,所有权结束日期的值是从下面获取属性名称的值.如果@ Model.End为null,如何将其设置为空?
编辑1:
我的模特
public class OwnedModuleDetails { public long Id { get; set; } public string ModuleId { get; set; } public string Owner { get; set; } public string KindName { get; set; } public string TypeName { get; set; } public DateTime Start { get; set; } public DateTime? End { get; set; } public IEnumerable<Property> Properties { get; set; } }
来自存储库的方法
public OwnedModuleDetails GetModuleDetails(long id,string owner) { // ReSharper disable ImplicitlyCapturedClosure var module = (_dbSis.OwnedModules.Where(t => t.Id == id).Select(m => new OwnedModuleDetails // ReSharper restore ImplicitlyCapturedClosure { Id = id,ModuleId = m.ModuleId,TypeName = m.ModuleType.TypeName,KindName = m.ModuleType.ModuleKind.KindName,Owner = owner,Start = m.Start,End = m.End,Properties = m.PropertyConfiguration.PropertyInstances.Select( x => new Property { Name = x.Property.Name,Value = x.Value }) })); return (module.FirstOrDefault()); }
解决方法
<dt>Ownership End Date</dt> <dd> @if (Model.End != null) { @Model.End } else { @: } </dd>
c# – Linq结果如果为null则为零
int result = database .Where(x => x.Name == "Criteria") .Sum(x => x.Count)) ?? 0;
除非linq没有找到任何东西,否则它将返回总和值,它将返回0.
编辑:该字段不能为空.
编辑2:我正在使用实体框架.
解决方法
int result = database .Where(x => x.Name == "Criteria") .Sum(x => (int?)x.Count) ?? 0;
这样做比将它包装在Try / Catch中更有效率和优雅.
我怀疑你正在使用Entity Framework.如果你只是使用Linq-to-Objects,那么其他人提供的解决方案就可以了.
c# – “null如果object为null,则为null;如果object不为null,则为object.member”
> How to check for nulls in a deep lambda expression? 10个
我正在尝试编写一个通用扩展方法,让我这样做:
this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() => { return DateTime.Parse(startDateXAttribute.Value); });
如果NullOrPropertyOf()在null对象上使用(例如,如果startDateXAttribute为null),则返回null,如果它不为null,则返回Func的结果.
这种扩展方法会是什么样的?
解决方法
x = foo.?bar.?baz;
也就是说,如果foo或foo.bar为null,则x为null,如果它们都不为null,则为foo.bar.baz的结果.
我们认为它适用于C#4,但它没有使它在优先级列表的顶部附近.对于该语言的假设未来版本,我们会记住这一点.
更新:C#6将具有此功能.有关设计注意事项的讨论,请参见http://roslyn.codeplex.com/discussions/540883.
DateDiff,如果为null,则使用以前的时间
您可以使用 Nz :
Private Sub AActReturn0_AfterUpdate()
Dim Final As Date
Final = Nz(AActFinish5,Nz(AActFinish4,Nz(AActFinish3,Nz(AActFinish2,Nz(AActFinish1)))))
AActDrive50 = DateDiff("n",[Final],[AActReturn0])
End Sub
今天的关于Java可选,如果object不为null-返回方法结果,如果为null-返回默认值和java 如果为null,默认值的分享已经结束,谢谢您的关注,如果想了解更多关于asp.net-mvc – 检查DateTime类型的值在视图中是否为null,如果为null则显示为空、c# – Linq结果如果为null则为零、c# – “null如果object为null,则为null;如果object不为null,则为object.member”、DateDiff,如果为null,则使用以前的时间的相关知识,请在本站进行查询。
本文标签: