在ref文档中,我发现只有例子
class ExamplePlugin {
def doWithDynamicMethods = { applicationContext ->
application.controllerClasses.each { controllerClass ->
controllerClass.metaClass.myNewMethod = {-> println "hello world" }
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不想为这样的代码创建插件......
Lucene为每个领域存储索引.因此,当我们执行查询"fld1:a AND fld2:b"时,我们将迭代Termdocs进行第一学期和第二学期.这不可能更快.在数据库的情况下,fld1和fld2的两个separete索引将运行缓慢,只使用一个.在这种情况下,DB需要fld1和fld2的复合键.
我的问题是.为什么DB不能使用Lucene索引算法执行布尔查询,如果它与DB索引一样快并且不需要不同的列组合?
Lucene Boolean Query搜索的一些细节:它使用接口TermDoc.使用两种方法的主要思想boolean skipTo(int)和方法boolean next().因此它不依赖于术语顺序(流行或非流行术语),因为这些方法调用的计数总是最不常见的术语(由于skipTo方法).所以没有必要在分层复合索引中,它不会带来任何额外的性能.
TermDocs t1 = searcher.docs(fld1:a);
TermDocs t2 = searcher.docs(fld2:b);
int doc = -1;
t1.next(); t2.next();
while(t1.doc()!=-1 && t2.doc()!=-1) {
if(t1.doc()<t2.doc()) {
if(!t1.skipTo(t2.doc)) return;
}
if(t2.doc()<t1.doc()) {
if(!t2.skipTo(t1.doc)) return;
}
if(t1.doc()==t2.doc()) {
println("found doc:"+t1.doc());
t1.next()
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有Iterator[A](大小是无限的)并且我想从中得到Iterator[B]类型A的一些后续值被聚合的地方.
示例:我有字符串列表:
Iterator(
"START",
"DATA1",
"DATA2",
"DATA3",
"START",
"DATA1",
"DATA2",
//.. 10^10 more records
)
Run Code Online (Sandbox Code Playgroud)
我想加入从START到NEXT START的字符串.即编写解析器.
Iterator(
"START DATA1 DATA2 DATA3",
"START DATA1 DATA2",
//.. 10^10 / 5 more records
)
Run Code Online (Sandbox Code Playgroud)
我知道如何强制执行此操作,但我想用scala高阶函数完成它.有任何想法吗?
PS EIP Aggregate http://camel.apache.org/aggregator2.html.
假设我有一个应该转换为Map的集合,但不是像map方法那样一对一的方式.
var map = collection.mutable.HashMap()
for (p <- dataList.par) {
if(cond1(p)) {
map += (p, true)
} else {
// do nothing
}
}
Run Code Online (Sandbox Code Playgroud)
我想出了几个解决方案,想知道什么是最好的.
map.synchronize { map += (p, true) }
使用actor更新地图.但我不知道如何等待所有演员任务完成
yield Some(p) or None然后跑foreach { case Some(p) => map += (p, true)}.但是,如果第一个迭代器来自并行集合,我不知道如何使它成为顺序.假设我有以下代码
def get[T](name:String)(implicit mf:ClassManifest[T]):T = mf.erasure match {
case classOf[Boolean] => obj.getBoolean(name)
case classOf[Int] => obj.getInt(name)
}
Run Code Online (Sandbox Code Playgroud)
现在代码不起作用,因为 classOf[Int] 是无效的匹配值。
为什么google-collections或guava包含语义上相同的功能?例:
static
<T> Predicate<T>
and(Predicate<? super T>... components)
static
<T> Predicate<T>
and(Predicate<? super T> first, Predicate<? super T> second)
Run Code Online (Sandbox Code Playgroud)
即所有可以接受多个参数的函数.
第二个问题为什么这些函数的定义使用泛型<? super T>而不是<T>?
我有4个核心桌面,并希望使用我的所有内核用于使用hadoop进行本地数据处理.(即,有时候我有足够的能力在本地处理数据,有时候我会向集群提交相同的工作).
默认情况下,hadoop本地模式只运行一个映射器和一个reducer,因此我的本地作业非常慢.我不希望首先在单台机器上设置集群,因为"痛苦"配置,其次我每次都要创建jar.如此完美的解决方案是如何在一台机器上运行嵌入式Hadoop
PS伪分布式模式是不好的选择,因为它将创建具有单个节点的集群,因此我将只获得一个映射器,我不得不花费一些时间来进行其他配置.
例如$(". > a")或可能是$("this > a" )或可能是$(this)("a")
If I'm developing a client side application with heavy load, what is the most appropriate choice of Ajax framework?
我无法使用IDEA运行以下代码
@Test
class CompanyURLTest extends Assert {
@Test
def test = assert(false);
}
Run Code Online (Sandbox Code Playgroud)
它运行,但J-Unit表示没有测试运行
当我使用common-collections时,我已经完成了对这些工具的自定义扩展,例如:
class MyCollectionUtils extends CollectionsUtils {
static myutilityMethod()
static removeDublicate(..)
static myPredicate(...)
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下CollectionsUtils,我只有一个导入的所有功能和我的扩展方法!
在guava中,所有静态实用程序类都是final.
扩展番石榴收集API的最佳方法是什么?例如,新的常用谓词,集合工厂等,集合组合器.
例如,我有代码
def equals(value1:String, value2:String) = value1 match {
case value2 => true
case _ => false
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决方法,但我并不喜欢语法
Run Code Online (Sandbox Code Playgroud)def equals(value1:String, value2:String) = value1 match { case v if v == value2 => true case _ => false }