如果我有一个带有以下内容的文本文件
red apple
green apple
green apple
orange
orange
orange
Run Code Online (Sandbox Code Playgroud)
是否有可用于获得以下结果的Linux命令或脚本?
1 red apple
2 green apple
3 orange
Run Code Online (Sandbox Code Playgroud) 我经常发现自己与元组的列表,序列和迭代器一起工作,并希望做类似以下的事情,
val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }
Run Code Online (Sandbox Code Playgroud)
但是,编译器似乎从不同意这种语法.相反,我最终写作,
arrayOfTuples.map {
t =>
val e1 = t._1
val e2 = t._2
e1.toString + e2
}
Run Code Online (Sandbox Code Playgroud)
这真是太傻了.我怎么能绕过这个?
我有一个问题,关于将命令的输出存储在bash脚本中的变量中.
我知道一般来说有两种方法可以做到这一点
或
foo=$(bar)
# or
foo=`bar`
Run Code Online (Sandbox Code Playgroud)
但对于Java版本查询,这似乎不起作用.
我做了:
version=$(java --version)
Run Code Online (Sandbox Code Playgroud)
这不会将值存储在var中.它甚至还会打印它,实际上并非如此.
我也尝试将输出重定向到文件,但这也失败了.
我正在尝试理解PrintWriter我正在制作的一个小程序,我似乎无法让java生成该文件然后在其上写.当我执行下面的程序时,它在第9行给出了一个Filenotfoundexeption错误.它也无法在我指定的目录中生成该文件.我是新手,所以请尽量保持简单的答案.我正在使用Eclipse.
import java.io.PrintWriter;
import java.io.File;
public class Testing {
public static void main(String[] args) {
File file = new File ("C:/Users/Me/Desktop/directory/file.txt");
PrintWriter printWriter = new PrintWriter ("file.txt");
printWriter.println ("hello");
printWriter.close ();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序(Quartz调度程序),我们有一个工作类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告诉/传递作业类的名称.
我想为所有想要使用API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业).我们的想法是创建一个(标记)接口,如果有人想要将它们的类声明为调度程序作业类,那么他们所要做的就是(声明)实现接口.
我不确定如何找到遵循合同的类(通过实现接口),以便我可以向想要在调度程序中安排触发器的用户显示它们.
我的要求是不在运行时加载类,而是显示实现所需接口的类的用户列表,以便用户可以选择类和类名称可以传递给调度程序.这是Quartz调度程序,它最终将负责创建类的实例.
任何人都可以建议我如何实现上述目标,还是有任何其他更好的方法来实现我想要做的事情?
编辑
我浏览了ServiceLoader的文档,似乎为了实现一个服务,我必须在META-INF文件夹中创建一个具有实现类名称的文件,这使我认为如果我的API的用户想要20个不同的实现,他必须在文件中放入20个条目,这对我来说似乎为最终用户做了很多额外的工作,因为每个工作类将被创建用于执行特定的工作,并且可以有100个工作类.
如果我的假设错了,请纠正我.
为了理解,我不能只是提出一个印刷声明:
def prod (m: Int) = {
for (a <- 2 to m/(2*3);
print (a + " ");
b <- (a+1) to m/a;
c = (a*b)
if (c < m)) yield c
}
Run Code Online (Sandbox Code Playgroud)
但我可以通过虚拟任务轻松绕过它:
def prod (m: Int) = {
for (a <- 2 to m/(2*3);
dummy = print (a + " ");
b <- (a+1) to m/a;
c = (a*b)
if (c < m)) yield c
}
Run Code Online (Sandbox Code Playgroud)
作为副作用,并且仅在开发中的代码中使用(到目前为止),是否有更好的临时解决方案?
是否有一个严重的问题为什么我不应该使用它,除了副作用?
从与Rex Kerr的讨论来看,必要性已经上升到显示原始代码,这有点复杂,但似乎与问题无关(2x .filter,最后调用方法),但是当我试图将Rex'模式应用到它我失败了,所以我在这里发布:
def prod (p: Array[Boolean], max: Int) …Run Code Online (Sandbox Code Playgroud) 我读到增强的for循环比这里的正常for循环更有效:
http://developer.android.com/guide/practices/performance.html#foreach
当我搜索它们的效率之间的差异时,我发现的是:在正常for循环的情况下,我们需要额外的步骤来找出数组的长度或大小等,
for(Integer i : list){
....
}
int n = list.size();
for(int i=0; i < n; ++i){
....
}
Run Code Online (Sandbox Code Playgroud)
但这是唯一的原因,增强的for循环优于正常的循环吗?在这种情况下,更好地使用normal for循环,因为理解增强的for循环有点复杂.
检查一个有趣的问题:http://www.coderanch.com/t/258147/java-programmer-SCJP/certification/Enhanced-Loop-Vs-Loop
任何人都可以解释这两种for循环的内部实现,或解释使用增强型for循环的其他原因吗?
我正在尝试使用asp.net中的类库创建验证图像,但这不是问题.
无论如何,我的问题是......好吧... system.drawing不存在所以我不能使用"位图".从类似的问题,人们告诉添加参考.但我已经这样做了,重新启动了我的电脑等.它不起作用.
除了添加引用之外我还能做什么?它不起作用或我做错了吗?
这基本上就是我做的:
但是,当我手动输入时,它不会出现在intellisense中或告诉我"它不存在,尝试添加引用".

我想在我当前位置的子目录之间进行迭代,并单独gzip每个文件.对于压缩目录中的文件,我使用
for file in *; do gzip "$file"; done
Run Code Online (Sandbox Code Playgroud)
但这可以只在当前目录上工作,而不是当前目录的子目录.如何重写上述语句,以便它还可以压缩所有子目录中的文件?