我有一个Future[List[Result]]
我需要运行一个逻辑,例如,如果列表中的所有项目均为Result.Ok
,然后返回Result.Ok
(或true),否则返回Result.BadRequest
(或false)
我尝试过:
futureResultList.map(temp => temp.forall(_ == true))
但是此代码仅在列表包含布尔值时有效。如果包含Result
个对象(更改检查to _ == Result.Ok
时)不起作用
答案 0 :(得分:8)
要返回Boolean
,您只需在forall
调用中更改谓词:
futureResultList.map(_.forall(_ == Result.Ok))
答案 1 :(得分:0)
概述此类示例的最简单方法是映射。如果您有结果列表,但需要布尔值列表,则将其映射。不要害怕多次映射,从长远来看,它会更具可读性:)
<div id="buttonLeft" class="ButtonLeft">
<asp:Panel runat="server" ID="pnlOutdoorPrice">
<div id="outdoor" class="Price outdoor">
<span class="Location">OUTDOOR</span><br />
<asp:label runat="server" ID="lblOutdoor" Text="Price" CssClass="PriceLabel" />
</div>
<div id="containerOutdoor">
<asp:Panel runat="server" ID="pnlOutdoorBookButton" Visible='<%# customFunctions.CheckinDateWithinSpecified(Convert.ToInt32(Eval("ProviderID")), this.txtCheckIn.Text) && customFunctions.CheckoutDateWithinSpecified(Convert.ToInt32(Eval("ProviderID")), this.txtCheckOut.Text) %>'>
<div class="BookButton">
<asp:LinkButton ID="btnBookOutdoor" runat="server" CommandName="Outdoor">BOOK</asp:LinkButton>
</div>
</asp:Panel>
</div>
</asp:Panel></div>
$(function () {
$('.ButtonLeft').hover(function () {
$(this).find('.outdoor').addClass('PriceHover');
}, function () {
$(this).find('.outdoor').removeClass('PriceHover');
});
});
或更简洁:
val futureResultList: Future[List[Result]] = ???
val futureBooleanList: Future[List[Boolean]] = futureResultList.map(_.map(_ == Result.OK))
val result = futureBooleanList.map(temp => temp.forall(_ == true))
当然,正如其他人所建议的,直接去检查Result对象的相等性。但是,映射通常对于在类型之间导航以及获得更清晰,更易读的代码很有用。