GVKun编程网logo

Java可选,如果object不为null-返回方法结果,如果为null-返回默认值(java 如果为null,默认值)

14

以上就是给各位分享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,默认值)

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则显示为空

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
    {
        @:&nbsp;
    }
</dd>

c# – Linq结果如果为null则为零

c# – Linq结果如果为null则为零

我怎么写这样的东西:

int result = database
                .Where(x => x.Name == "Criteria")
                .Sum(x => x.Count)) ?? 0;

除非linq没有找到任何东西,否则它将返回总和值,它将返回0.

编辑:该字段不能为空.

编辑2:我正在使用实体框架.

解决方法

您与原始查询非常接近.你只需要转换你的Count变量:

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”

c# – “null如果object为null,则为null;如果object不为null,则为object.member”

参见英文答案 > Deep null checking,is there a better way?16个
> 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,则使用以前的时间

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,则使用以前的时间的相关知识,请在本站进行查询。

本文标签: