我刚刚开始使用Java 8 lambdas,我正在尝试实现我在函数式语言中习惯的一些东西.
例如,大多数函数式语言都有某种类型的查找函数,这些函数对序列进行操作,或者列表返回谓词所在的第一个元素true
.我在Java 8中实现这一目标的唯一方法是:
lst.stream()
.filter(x -> x > 5)
.findFirst()
Run Code Online (Sandbox Code Playgroud)
然而这对我来说似乎效率低下,因为过滤器会扫描整个列表,至少根据我的理解(这可能是错误的).有没有更好的办法?
在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)
(我知道这是一个内部联接)
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的一部分(不再是?).
我正在尝试从字符串创建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) 我正在尝试为一个案例类编写一个自定义的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)
任何帮助是极大的赞赏!
我知道之前已被问过,但我尝试了所有我找到的解决方案,但仍然无法正常工作.
基本上,我试图通过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) 我有一张超过十亿条记录的桌子.为了提高性能,我将其分区为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) 我正在使用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 [_].
非常感谢所有的帮助!
我有一个带有分区表的表结构,其中一些子表继承自公共父表.怎么这样我DELETE
只从父表?
长话短说,我最终得到了父表中的一些数据,这应该永远不会发生,但现在我必须清理这些混乱.
我在编写一个带选项的函数时遇到了一些问题.其中一个选项值是一个函数.我是一个得到这个值,但保持它没有评价.我尝试了所有我能想到的东西,但到目前为止没有任何效果.
基本上,为了说明这是我试过的:
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]被评估一次而不是每次迭代表.我想阻止这个.问题更复杂,但它是沿着这些方向发展的.
谢谢!
java ×3
java-8 ×2
postgresql ×2
scala ×2
sql ×2
database ×1
f# ×1
f#-3.0 ×1
httpclient ×1
https ×1
java-stream ×1
json ×1
partitioning ×1
slick ×1
ssl ×1