我永远不知道在文件中写入/存储/保存内容的函数的正确名称是什么.什么时候我应该使用save()vs store()vs write(),这些之间的意义有什么不同?
我想store如果我写入数据库,write文本文件和save二进制数据,是否正确使用?那些XML文件呢?
为了练习Java 8流,我尝试将以下嵌套循环转换为Java 8流API.它计算a ^ b(a,b <100)的最大数字总和,并在我的Core i5 760上占用~0.135s.
public static int digitSum(BigInteger x)
{
int sum = 0;
for(char c: x.toString().toCharArray()) {sum+=Integer.valueOf(c+"");}
return sum;
}
@Test public void solve()
{
int max = 0;
for(int i=1;i<100;i++)
for(int j=1;j<100;j++)
max = Math.max(max,digitSum(BigInteger.valueOf(i).pow(j)));
System.out.println(max);
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案,我希望由于并行性而更快,实际上需要0.25秒(0.19秒没有parallel()):
int max = IntStream.range(1,100).parallel()
.map(i -> IntStream.range(1, 100)
.map(j->digitSum(BigInteger.valueOf(i).pow(j)))
.max().getAsInt()).max().getAsInt();
Run Code Online (Sandbox Code Playgroud)
我的问题
我知道微基准测试很脆弱,并行性只对大问题是值得的,但对于CPU来说,甚至0.1秒都是永恒的,对吗?
更新
我使用Eclipse Kepler中的Junit 4框架进行测量(它显示了执行测试所花费的时间).
我的结果为a,b <1000而不是100:
更新2sum+=Integer.valueOf(c+"");用sum+= c - '0';(谢谢彼得!)
替换平行方法10秒,使其达到45秒.没想到这么大的性能影响!
此外,减少与CPU内核数量的并行性(在我的情况下为4)没有做太多,因为它将时间减少到44.8s(是的,它增加了a和b …
如何关闭Stanford CoreNLP消息(见帖子末尾)?我首先尝试log4j.category.edu.stanford=OFF在log4j.properties中设置,但这没有帮助,所以我发现它显然使用了一个名为"Redwood"的非标准日志框架.根据http://nlp.stanford.edu/nlp/javadoc/javanlp/有文档但它受密码保护.我尝试过, RedwoodConfiguration.empty().apply();但这也无济于事.
记录消息:
Adding annotator tokenize
Adding annotator ssplit
Adding annotator pos
Loading default properties from tagger edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1,2 sec].
Run Code Online (Sandbox Code Playgroud)
PS:Redwood.hideAllChannels();也行不通.但是,以下内容会抑制我自己的日志记录语句(但不是来自StanfordCoreNLP的语句):
RedwoodConfiguration.empty().apply();
Redwood.log("test redwood");
Run Code Online (Sandbox Code Playgroud)
解决方案好的,StevenC是对的,毕竟它不是记录语句,但是默认初始化消息被写入stderr,我没想到会看到Stanford拥有它自己的日志框架然后不使用它:-)
无论如何,他的提示让我发现了这个解决方案:
// shut off the annoying intialization messages
RedwoodConfiguration.empty().captureStderr().apply();
nlp = new StanfordCoreNLP(myproperties);
// enable stderr again
RedwoodConfiguration.current().clear().apply();
Run Code Online (Sandbox Code Playgroud) 我经常需要根据产生double或int值的标准的最大化来收集集合的最大元素.Streams有max()函数,需要我实现一个比较器,我觉得很麻烦.是否有更简洁的语法,例如names.stream().argmax(String::length)在以下示例中?
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class ArgMax
{
public static void main(String[] args)
{
List<String> names = Arrays.asList("John","Joe","Marilyn");
String longestName = names.stream().max((String s,String t)->(Integer.compare(s.length(),t.length()))).get();
System.out.println(longestName);
}
}
Run Code Online (Sandbox Code Playgroud) 我使用带有Darkula颜色方案的IntelliJ IDEA 2016.1.2,但对比度对我来说太低,所以我想将背景颜色设置为纯黑色(#000000).虽然可以选择将控制台和编辑器的背景设置为黑色,但这不适用于用户界面的其余部分.如何将整个主题(控制台,编辑器,菜单,对话框......)的背景颜色更改为黑色?
令我惊讶的是,当通过预生成阵列中的结果与原始的8毫秒相比来"优化"乘法时,我得到更长的时间(10毫秒).这只是一个Java怪癖还是PC架构的一般?我有一个带有Java 7,Windows 8 64位的Core i5 760.
public class Test {
public static void main(String[] args) {
long start = System.currentTimeMillis();
long sum=0;
int[] sqr = new int[1000];
for(int a=1;a<1000;a++) {sqr[a]=a*a;}
for(int b=1;b<1000;b++)
// for(int a=1;a<1000;a++) {sum+=a*a+b*b;}
for(int a=1;a<1000;a++) {sum+=sqr[a]+sqr[b];}
System.out.println(System.currentTimeMillis()-start+"ms");
System.out.println(sum);
}
}
Run Code Online (Sandbox Code Playgroud) 我在三台不同的计算机上使用Eclipse,并希望统一我的首选项,例如UTF-8编码和代码模板.之前已经问过这个问题,但那是在将Oomph集成到Eclipse之前.Oomph是否具有"Ooomph Cloud"等功能,我可以使用我的Google帐户登录并同步我的偏好设置?
我的 Web 应用程序的用户应该将错误报告作为 GitHub 问题提供,并带有预先生成的标题和正文。
这对于小型机构使用 GET 非常好:
const title = getLastErrorTitle();
const body = getAllTheLogMessages();
window.open(`https://github.com/theuser/therepo/issues/new?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`);
Run Code Online (Sandbox Code Playgroud)
如果用户已登录,GitHub 会向用户显示一个新问题,标题和正文已填写,完美。如果没有,GitHub 会提示用户登录,下次再运行。
但是,如果正文太大,则 GET 请求会因为 URL 变得太长而失败。
在查阅手册后,我尝试对 POST 做同样的事情,但我从 GitHub 获得了一个 404 并带有以下测试请求(为简洁起见是 jQuery):
$.ajax({
type: "POST",
url: "https://api.github.com/repos/theuser/therepo/issues",
data: data = {title: "Test", body: "Test Body"},
});
Run Code Online (Sandbox Code Playgroud)
我的怀疑是,GitHub API 的设计并没有考虑到我的用例,但是 POST 总是需要身份验证并一次性创建完整的问题,而不会让用户像使用 GET 那样事先更改它。
如何将 GET 方法的功能转移到 POST 方法?我只希望 GitHub 向当前登录浏览器的用户显示一个预填充的问题,而不需要令牌。
Eclipse给出了关于"out"声明的警告.这是误报吗?
Random r = new Random();
try(PrintWriter out1 = new PrintWriter("one.txt");
PrintWriter out2 = new PrintWriter("two.txt"))
{
PrintWriter out = r.nextBoolean()?out1:out2;
out.println("x");
}
Run Code Online (Sandbox Code Playgroud)
PS:警告是" 资源泄漏:'out'永远不会关闭 ".
我想计算Google表格中不同时区的日期时间之间的时差.
如果我将两个字段格式化为"datetime"而将另一个字段格式化为"duration",我可以使用差异运算符成功计算同一时区内的差异.
示例: A1 = 1/10/2016 10:10:00,B2 = 13/11/2016 15:35:00C2 = =B2-B1.
但是,当我将时区添加到日期时间时,例如A1 = 1/10/2016 10:10:00 GMT+1:00:00,C2显示#VALUE.
我知道我可以自己计算时区差异并从持续时间中减去它,但有没有办法通过直接在datetime字段中指定时区来实现自动化?
java ×5
java-8 ×2
java-stream ×2
api ×1
argmax ×1
cloud ×1
color-scheme ×1
datetime ×1
eclipse ×1
github ×1
github-api ×1
javascript ×1
load ×1
logging ×1
nested-loops ×1
oomph ×1
optimization ×1
performance ×1
post ×1
save ×1
share ×1
stanford-nlp ×1
store ×1
timezone ×1