我开箱即用或多或少地运行以下代码
http://download.oracle.com/javase/1.4.2/docs/guide/nio/example/Grep.java
我正在使用以下VM参数
-Xms756m -Xmx1024m
它在400mb文件上与OutOfMemory崩溃.我究竟做错了什么?
堆栈跟踪:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapCharBuffer.<init>(Unknown Source)
at java.nio.CharBuffer.allocate(Unknown Source)
at java.nio.charset.CharsetDecoder.decode(Unknown Source)
at com.alluvialtrading.tools.Importer.<init>(Importer.java:46)
at com.alluvialtrading.tools.ReutersImporter.<init>(ReutersImporter.java:24)
at com.alluvialtrading.tools.ReutersImporter.main(ReutersImporter.java:20)
Run Code Online (Sandbox Code Playgroud) 我想要做的草图如下
def printcsv(args: String*) {
val line = for (arg <- args) {???}
println(line)
}
Run Code Online (Sandbox Code Playgroud)
我想要
printcsv("Hello","to","world")
打印
"你好","来","世界"
我能做到这一点是很多必要的扭曲,但我正在努力寻找一个优雅的解决方案.存储在val中非常重要,而不是直接打印到控制台.
在我的基础课我
trait EventReceiver {
def onStart(start: Start) {
}
}
Run Code Online (Sandbox Code Playgroud)
我定义
def benchmark = new EventReceiver {}
Run Code Online (Sandbox Code Playgroud)
因为我需要在基类中进行一些处理.在我的客户使用的子类中,他们执行类似于以下操作的操作
override def benchmark = new EventReceiver {
override def onStart(start: Start) {
println("benchmark start")
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这有点笨拙
override def benchmark = new EventReceiver { ...
Run Code Online (Sandbox Code Playgroud)
有没有更好的表达方式?理想情况下它会是这样的
singleword {
override def onStart(start: Start) {
println("benchmark start")
}
}
Run Code Online (Sandbox Code Playgroud) 例如,假设我有以下数据
ABC,3,4
,,ExtraInfo
,,MoreInfo
XYZ,6,7
,,XyzInfo
,,MoreXyz
ABC,1,2
,,ABCInfo
,,MoreABC
Run Code Online (Sandbox Code Playgroud)
获取grep以提取ABC线是微不足道的.但是,如果我还想抓住以下行来产生此输出
ABC,3,4
,,ExtraInfo
,,MoreInfo
ABC,1,2
,,ABCInfo
,,MoreABC
Run Code Online (Sandbox Code Playgroud)
可以使用grep和标准shell脚本来完成吗?
编辑:只是为了澄清它们之间可能存在可变数量的行.逻辑是在CSV的第一列为空时继续打印.
我有一个事件驱动系统,响应交易如下
def onTrade {
if (price > threshold) {
processReject()
return
}
if (volume > threshold) {
processReject()
return
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过定义内部方法来语法上改进
def onTrade {
def filterRemove = (filter: Boolean) => {
if (filter) {
processReject()
}
filter
}
val filters = List(
filterRemove(price > threshold),
filterRemove(volume > threshold),...
)
if (filters.filter(x => x == true).size > 0) return
}
Run Code Online (Sandbox Code Playgroud)
语法更清晰,特别是随着过滤器数量的增加.我遇到的一个问题是代码通过遍历每个单独的测试而不是在第一次失败时返回来浪费不必要的时钟周期.这有什么办法吗?例如,一旦filterRemove返回false,就退出onTrade.如果有一种更有表现力的方式来做到这一点,我也很想知道这一点.
以下两个打印都是假的.所需的行为是第一个打印为true,第二个打印为false.我不确定为什么总是会被打印出来.
def myTest(filter: => Boolean) = () => {
if (filter) {
// do something here
true
}
false
}
println(myTest(5 > 3)())
println(myTest(5 > 7)())
Run Code Online (Sandbox Code Playgroud) 源代码如下:
#include <stdio.h>
#include <string.h>
char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};
void find_track(char search_for[]) {
int i;
for (i=0; i<5; i++) {
if (strstr(tracks[i], search_for)) {
printf("Track %i: '%s'\n", i, tracks[i]);
}
}
}
int main() {
char search_for[80];
printf("Search for:");
fgets(search_for, 80, stdin);
find_track(search_for);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用该程序时如下:
搜索:城镇
我希望有类似的东西
第1轨:'纽瓦克,纽瓦克 - 一个美妙的小镇' …
我的计划如下:
#include <stdio.h>
int collatz(int seed, int count) {
int next = 0;
if (seed % 2 == 0) {
next = seed / 2;
} else {
next = 3 * seed + 1;
}
count++;
if (next == 1) {
return count;
} else {
return collatz(next, count);
}
}
int main() {
int max = 0;
int index = 0;
int i;
for (i=1; i<1000000; i++) {
int current = collatz(i, 1);
if (current > max) { …Run Code Online (Sandbox Code Playgroud)