小编Chi*_*rlo的帖子

unix/linux的Java IO实现"tail -f"

我想知道用什么技术和/或库来实现linux命令"tail -f"的功能.我基本上是在寻找一个附加/替换的下降java.io.FileReader.客户端代码可能如下所示:

TailFileReader lft = new TailFileReader("application.log");
BufferedReader br = new BufferedReader(lft);
String line;
try {
  while (true) {
    line= br.readLine();
    // do something interesting with line
  }
} catch (IOException e) {
  // barf
}
Run Code Online (Sandbox Code Playgroud)

缺失的部分是合理的实施TailFileReader.它应该能够读取文件打开前存在的文件部分以及添加的行.

java file-io iostream file tail

69
推荐指数
5
解决办法
7万
查看次数

Java 8中的链接选项

寻找一种链接选项的方法,以便返回第一个存在的选项.如果没有,Optional.empty()则应退回.

假设我有几个像这样的方法:

Optional<String> find1()
Run Code Online (Sandbox Code Playgroud)

我想把它们链起来:

Optional<String> result = find1().orElse( this::find2 ).orElse( this::find3 );
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用,因为orElse期望一个值,并orElseGet期望一个Supplier.

java lambda optional java-8

59
推荐指数
4
解决办法
3万
查看次数

为什么 terraform 失败并显示“此处不需要名为“flow_log_destination_type”的参数”?

当我使用 terraform 创建 vpc 流日志模块到 s3 存储桶时,它会抛出如下错误:

  An argument named "flow_log_destination_type" is not expected here.
  An argument named "flow_log_destination_arn" is not expected here.
Run Code Online (Sandbox Code Playgroud)

在 Terraform 文档中,我可以看到要填写的详细信息,例如log_destination_type & log_destination_arn,并且我在 GitHub 上找到了一些文档,这些文档完全相同,但在尝试时它对我不起作用

产生以下错误:

Error: Unsupported argument

  on main.tf line 52, in module "vpc_with_flow_logs_s3_bucket":
  52:   flow_log_destination_type = "s3"

An argument named "flow_log_destination_type" is not expected here.


Error: Unsupported argument

  on main.tf line 53, in module "vpc_with_flow_logs_s3_bucket":
  53:   flow_log_destination_arn  = "${aws_s3_bucket.terra-test2-lifecycle.arn}"

An argument named "flow_log_destination_arn" is not expected here.


Error: Unsupported argument …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform

16
推荐指数
2
解决办法
6万
查看次数

Scala中的构造函数局部变量

我正在使用"Scala for the Impatient"练习5.7,我需要创建一个类名为 Person的类:构造函数上的字符串,并且有两个属性firstNamelastName由名称分隔的空格填充.我的第一次试验是:

class Person(name:String) {
  private val nameParts = name.split(" ")

  val firstName = nameParts(0)
  val lastName = nameParts(1)
}
Run Code Online (Sandbox Code Playgroud)

问题是,现在nameParts仍然是一个在类中始终可见的私有字段,实际上应该只存在于构造函数的本地环境中.我想要的Java相当于:

 class Person{
    private final String firstName;
    private final String lastName;

    Person(String name){
        final String[] nameParts = name.split(" ");
        firstName = nameParts[0];
        lastName = nameParts[1];
    }
 }
Run Code Online (Sandbox Code Playgroud)

在这里,nameParts只存在构造函数,这正是我的目标.有关如何在Scala中完成此操作的任何提示?

注意:我最终找到了更"Scalesque"的方式:

class Person(name:String) {
    val firstName::lastName::_ = name.split(" ").toList 
}
Run Code Online (Sandbox Code Playgroud)

但我还是希望得到我的问题的答案.

scala

15
推荐指数
2
解决办法
3001
查看次数

归还这有什么问题?

在我工作的公司,有一份文档描述了我们应该在Java中遵循的良好实践.其中之一是避免返回的方法,this例如:

class Properties {

  public Properties add(String k, String v) {
   //store (k,v) somewhere
     return this;
  }

}
Run Code Online (Sandbox Code Playgroud)

我会有这样一堂课,所以我能写:

 properties.add("name", "john").add("role","swd"). ...
Run Code Online (Sandbox Code Playgroud)

我已经多次见过这样的习语,就像在里面一样,StringBuilder并没有发现任何问题.

他们的论证是:

...可能是同步问题的根源或对目标对象状态的失败预期.

我想不出这可能是真的情况,你们有谁能举个例子吗?

编辑该文档没有指定任何有关可变性的内容,因此我没有看到链接调用和执行以下操作之间的差异:

properties.add("name", "john");
properties.add("role", "swd");
Run Code Online (Sandbox Code Playgroud)

我会尝试与发起人联系,但我想用我的枪加载,这就是为什么我发布了这个问题.

解决:我得与其中一位作者交谈,他的初衷显然是为了避免释放尚未准备好的对象,比如在Builder模式中,并解释说如果在调用之间发生上下文切换,则对象可能在无效的状态.我认为这与返回无关,this因为你可以犯同样的错误购买逐个调用方法,并且更多地与正确地同步构建过程有关.他承认该文件可能更加明确,并将很快修改.胜利是我的/我们的!

java oop this

15
推荐指数
2
解决办法
358
查看次数

在scala中匹配未知大小的元组

是否可以部分匹配a tuple而无需指定大小?例如,如果我有一个元组

val v = ( "Dr", "John","H", "Watson") 
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

v match { 
   case ( "Dr", : _*) => "What's up, Doc?"
   case ( "Mr", name,   :_*) =>  s"Welcome, Mr. ${name}"
   case _ => "Have we met?"
} 
Run Code Online (Sandbox Code Playgroud)

这不编译,:_*通常意味着未确定数量的参数,但显然不能在这种情况下使用.我的想法是能够将这个匹配器用于任何大于2的元组.我知道我可以先将它转换vList(例如),只是想知道是否有可能用它做tuple.

编辑:我在网上找到的信息最多是本次讨论,其历史可以追溯到2.8阶,所以我会用"不,你不能"的答案.

scala tuples pattern-matching

9
推荐指数
2
解决办法
1815
查看次数

当App仅在iOS8中以纵向锁定时,UIAlertView会更改为横向

我有一个应用程序,它的方向被锁定为纵向模式,但当我有一个UIAlertView并将iPhone转为横向时,警报会改变方向并裁剪警报的叠加层.仅限iOS8.

有人有这个错误吗?

iphone orientation uialertview xcode6 ios8

8
推荐指数
1
解决办法
4034
查看次数

Scala web框架性能上覆盆子pi

我需要编写一个基于Web的小型UI,它可以运行raspi,因为我试图将一些Scala拉入我的日常工作中,我想使用其中一个Play,Scalatra或者Lift.有没有人有使用这些框架开发Raspberry Pi的经验?如果是这样,哪一个在性能方面更合适?

scala lift playframework scalatra raspberry-pi

7
推荐指数
1
解决办法
3795
查看次数

Scala中的比较

val a=new String("Hello")和之间有什么区别val a="Hello"

例:

val a="Hello"
val b="Hello"
a eq b
res:Boolean=True
Run Code Online (Sandbox Code Playgroud)

同理:

val a=new String("Hello")
val b=new string("Hello")
a eq b
res:Bolean=False
Run Code Online (Sandbox Code Playgroud)

scala

7
推荐指数
1
解决办法
780
查看次数

为什么不是java 7中的Files.readAllLines(String path)?

我正在尝试学习nio 2Java 7中的包,我偶然发现了这个Files.readAllLines(Path p, Charset cs)方法.我发现它非常有用,但我认为应该有一个没有cs参数的版本,就像:

 public static List<String> readAllLines(String path)
    throws IOException
{ return readAllLines(Paths.get(path), Charset.defaultCharset());}
Run Code Online (Sandbox Code Playgroud)

我确信无论如何大多数时候都会使用默认的Charset调用该方法,所以为什么没有shorcut.是否有任何关于charsets的遗漏可以证明没有这种方法?我很惊讶,因为Scala有这个选项:

Source.fromFile("fileName").getLines
Run Code Online (Sandbox Code Playgroud)

所以我不明白为什么Java不应该.任何意见?

java java-7 nio2

6
推荐指数
1
解决办法
1万
查看次数