小编sik*_*iki的帖子

按谓词查找第一个元素

我刚刚开始使用Java 8 lambdas,我正在尝试实现我在函数式语言中习惯的一些东西.

例如,大多数函数式语言都有某种类型的查找函数,这些函数对序列进行操作,或者列表返回谓词所在的第一个元素true.我在Java 8中实现这一目标的唯一方法是:

lst.stream()
    .filter(x -> x > 5)
    .findFirst()
Run Code Online (Sandbox Code Playgroud)

然而这对我来说似乎效率低下,因为过滤器会扫描整个列表,至少根据我的理解(这可能是错误的).有没有更好的办法?

java java-8 java-stream

478
推荐指数
5
解决办法
36万
查看次数

使用Option进行左/右/外连接

在Slick示例中,有一些连接示例,其中一个结果列可以为空,因为在执行左,右或外连接时可能就是这种情况.例如:

val explicitLeftOuterJoin = for {
  (c, s) <- Coffees leftJoin Suppliers on (_.supID === _.id)
} yield (c.name, s.name.?)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想返回整个映射对象呢?我的意思是:

val explicitLeftOuterJoin = for {
  (c, s) <- Coffees leftJoin Suppliers on (_.supID === _.id)
} yield (c, s.?)
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,因为它抱怨"找不到scala.slick.lifted.TypeMapper [供应商]类型的证据参数的隐含值".基本上我想要它返回一个元组列表(咖啡,选项[供应商])

为什么这不起作用,它的修复方法是什么?特别是,因为这很好:

val q = for {
  c <- Coffees
  s <- Suppliers
} yield (c, s)
Run Code Online (Sandbox Code Playgroud)

(我知道这是一个内部联接)

scala slick

17
推荐指数
2
解决办法
8688
查看次数

Java 8可选*值的操作.

Java的8有许多可选类,像OptionalDouble,OptionalInt,OptionalLong.

是否有一种很好的操作方式与相同类型的可选值?也就是说,我希望能够做到:

OptionalDouble d1 = OptionalDouble.of(1.);
OptionalDouble d2 = OptionalDouble.of(2.);
OptionalDouble d3 = OptionalDouble.of(3.);

OptionalDouble result = d1.add(d2).multiply(d3);
Run Code Online (Sandbox Code Playgroud)

当然,如果它们中的任何一个"空",结果应该是空的.在谷歌搜索了一下后,我发现了一些代码示例,人们正在使用这些函数(例如add),但它不是API的一部分(不再是?).

java java-8

12
推荐指数
2
解决办法
1965
查看次数

从String创建区分联合案例

我正在尝试从字符串创建DU案例.我可以看到这样做的唯一方法是通过枚举DU情况Microsoft.FSharp.Reflection.FSharpType.GetUnionCases,然后选择UnionCase匹配字符串(通过使用.Name),然后通过使用实现DU的情况FSharpValue.MakeUnion.

这样做是不是更简单/更优雅?在我的场景中,我有一个DU,有几百个关键字案例.我必须从文件中读取字符串(关键字)并从中提取类型.通过将案例放入Map中我做了一些"优化",但我希望有更好的方法来做到这一点.

我有以下内容,例如:

type Keyword = 
    | FOO
    | BAR
    | BAZ
    | BLAH

let mkKeywords (file: string) =
    use sr = new StreamReader(file)

    let caseMap = 
        FSharpType.GetUnionCases(typeof<Keyword>)
        |> Array.map (fun c -> (c.Name, FSharpValue.MakeUnion(c, [||]) :?> Keyword))
        |> Map.ofArray

    [
        while not sr.EndOfStream do
            let l = sr.ReadLine().Trim()

            match caseMap.TryFind l with
            | Some c -> yield c
            | None -> failwith <| "Could not find keyword: " + l
    ] 
Run Code Online (Sandbox Code Playgroud)

f# f#-3.0

10
推荐指数
3
解决办法
3152
查看次数

自定义Json使用组合器写入 - 不需要案例类的所有字段

我正在尝试为一个案例类编写一个自定义的Json序列化程序,但我不希望它序列化该类的所有字段.我对Scala很新,所以这肯定是问题,但这是我到目前为止所尝试的:

case class Foo(a: String, b: Int, c: Double)
Run Code Online (Sandbox Code Playgroud)

现在,这样做的默认方式,就我在示例中看到的是:

implicit val fooWrites: Writes[Foo] = (
  (__ \ "a").write[String] and
  (__ \ "b").write[Int]
  (__ \ "c").write[Double]
) (unlift(Foo.unapply))
Run Code Online (Sandbox Code Playgroud)

但是如果我想从Json输出中省略"c"怎么办?到目前为止我已经尝试过这个但是它没有编译:

implicit val fooWritesAlt: Writes[Foo] = (
  (__ \ "a").write[String] and
  (__ \ "b").write[Int]
) (unlift({(f: Foo) => Some((f.a, f.b))}))
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

json scala playframework-2.0

9
推荐指数
3
解决办法
3881
查看次数

Apache Http客户端SSL证书错误

我知道之前已被问过,但我尝试了所有我找到的解决方案,但仍然无法正常工作.

基本上,我试图通过Apache Http Client(4.3)获取一些内容,而我正在连接的网站存在一些SSL问题.

首先,我得到SSLException了和unrecognized_name消息.我试图通过将jsse.enableSNIExtension属性设置为来解决这个问题false.

然后,我得到了这个例外: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

然后我尝试提供我SSLFactory接受所有证书的赢了,但我仍然得到同样的例外.这是我的代码:

private static void sslTest() throws Exception {
    System.setProperty("jsse.enableSNIExtension", "false");

    SSLContext sslContext = SSLContexts.custom()
            .loadTrustMaterial(null, new TrustSelfSignedStrategy())
            .useTLS()
            .build();

    SSLConnectionSocketFactory connectionFactory =
            new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier());

    CookieStore cookieStore = new BasicCookieStore();
    HttpClientContext context = HttpClientContext.create();
    context.setCookieStore(cookieStore);

    CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLSocketFactory(connectionFactory)
            .setDefaultCookieStore(cookieStore)
            .build();

    URI uri = new URIBuilder() …
Run Code Online (Sandbox Code Playgroud)

java ssl https httpclient apache-httpclient-4.x

8
推荐指数
2
解决办法
1万
查看次数

分区表查询仍然扫描所有分区

我有一张超过十亿条记录的桌子.为了提高性能,我将其分区为30个分区.最常见的查询(id = ...)在where子句中有,所以我决定在id列上对表进行分区.

基本上,分区是以这种方式创建的:

CREATE TABLE foo_0 (CHECK (id % 30 = 0)) INHERITS (foo);
CREATE TABLE foo_1 (CHECK (id % 30 = 1)) INHERITS (foo);
CREATE TABLE foo_2 (CHECK (id % 30 = 2)) INHERITS (foo);
CREATE TABLE foo_3 (CHECK (id % 30 = 3)) INHERITS (foo);
.
.
.
Run Code Online (Sandbox Code Playgroud)

我跑ANALYZE了整个数据库,特别是,我id通过运行它来收集这个表的列的额外统计信息:

ALTER TABLE foo ALTER COLUMN id SET STATISTICS 10000;
Run Code Online (Sandbox Code Playgroud)

但是,当我运行在id列上过滤的查询时,计划程序会显示它仍在扫描所有分区.constraint_exclusion设置为partition,所以这不是问题.

EXPLAIN ANALYZE SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql partitioning

6
推荐指数
2
解决办法
4181
查看次数

在Play中使用自定义处理程序覆盖onRouteRequest!斯卡拉

我正在使用Play 2.2.1并尝试覆盖GlobalSettings中的onRouteRequest函数.我在网上找到的所有示例都适用于Play 2.2.x之前,它们似乎不适用于2.2.x. 基本上想要在响应头中为所有响应设置一些自定义内容.

到目前为止,基于,我尝试了以下内容:

object Global extends GlobalSettings {

  override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    super.onRouteRequest(request).map { handler =>
      handler match {
        case a: Action[_] => CustomAction(a)
        case _            => handler
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为没有匹配Action [_].

非常感谢所有的帮助!

playframework playframework-2.2

5
推荐指数
1
解决办法
1506
查看次数

PostgreSQL仅从父表中删除

我有一个带有分区表的表结构,其中一些子表继承自公共父表.怎么这样我DELETE 从父表?

长话短说,我最终得到了父表中的一些数据,这应该永远不会发生,但现在我必须清理这些混乱.

sql postgresql postgresql-9.1

5
推荐指数
1
解决办法
2128
查看次数

在Mathematica中保留未评估选项的值

我在编写一个带选项的函数时遇到了一些问题.其中一个选项值是一个函数.我是一个得到这个值,但保持它没有评价.我尝试了所有我能想到的东西,但到目前为止没有任何效果.

基本上,为了说明这是我试过的:

SetAttributes[Foo, HoldRest];
Options[Foo] = {Blah -> None}

Foo[x_, OptionsPattern[]] :=
    Module[{blah},

        blah = OptionValue[Automatic, Automatic, Blah, Hold];
        .
        .
        .
Run Code Online (Sandbox Code Playgroud)

然后当我有:

func[a_, b_, c_] := a + b + c;
Run Code Online (Sandbox Code Playgroud)

我希望能够通过以下方式致电Foo:

Foo[2, Blah -> func[1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

并且让"blah"变量(在Foo内部)得到重新评估,即blah = func [1,2,3].

感谢您提前获得所有帮助!

编辑:

由于原因太长而无法详细说明,我无法使用RuleDelayed(:>).我正在尝试编写一个函数,这个函数将放在一个包中,由其他不熟悉Mathematica的人使用,所以他们不知道是什么:>是.使用规则( - >)来指定选项及其值是标准方法,他们熟悉它.

所以为了进一步说明,让我说我正在尝试编写一个数字生成器函数,该函数将生成实际数字的函数作为其中一个选项:

Options[GenerateNumbers] = {GeneratorFunction -> None};

GenerateNumbers[n_, OptionsPattern[]] :=
    Module[{func},

        func = OptionValue[GeneratorFunction];
        Table[func, {n}]
    ]     
]
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用以下值调用此函数:

GenerateNumbers[5, GeneratorFunction -> RandomReal[10]]
Run Code Online (Sandbox Code Playgroud)

它将返回5个相同的数字列表,因为RandomReal [10]被评估一次而不是每次迭代表.我想阻止这个.问题更复杂,但它是沿着这些方向发展的.

谢谢!

wolfram-mathematica

4
推荐指数
1
解决办法
348
查看次数