小编mat*_*ter的帖子

递归创建目录

有没有人知道如何使用Java来创建基于n级深度字母表(az)的子目录?

 /a
    /a
        /a
        /b
        /c
        ..
    /b
        /a
        /b
        ..
    ..
        /a
        /b
        /c
        ..

/b
    /a
        /a
        /b
        ..
    /b
        /a
        /b
        ..
    ..
        /a
        /b
        ..
..
    /a
        /a
        /b
        ..
    /b
        /a
        /b
        ..
    ..
        /a
        /b
        ..
Run Code Online (Sandbox Code Playgroud)

java recursion scala file

23
推荐指数
4
解决办法
5万
查看次数

如何在sbt,Eclipse和github中初始化一个新的Scala项目

如何在sbt,Eclipse和github中初始化一个新的Scala项目,以便它们一起播放...

eclipse git scala sbt

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

理解为什么"pimp my library"在Scala中以这种方式定义

如果我想在Scala中为类添加方法,我需要执行以下操作:

class RichFoo(f: Foo) {
  def newMethod = f.bar()
}
object RichFoo {
  implicit def foo2Rich(f: Foo) = new RichFoo(f)
}
Run Code Online (Sandbox Code Playgroud)

然后f.newMethod将导致RichFoo实例的创建并调用其方法.

我试图理解为什么它没有像Ruby那样定义:

override class Foo {
  def newMethod = bar
}
Run Code Online (Sandbox Code Playgroud)

编译器可以查看此定义,并使用静态方法newMethod创建一个FooOverride类,该方法获取类型为Foo的参数并调用其bar方法.这就是Scala实现特征的方式.我仍然需要导入包含Foo覆盖的包来使用它.

它似乎涉及较少的输入,不需要我创建名称,并具有更好的性能(不调用方法和创建对象).隐式转换方法所做的任何事情都可以在附加方法中完成.

我确定我错过了一些东西,并想深入了解一下.

scala

18
推荐指数
2
解决办法
3579
查看次数

如何使函数涉及期货尾递归?

在我的Scala应用程序中,我有一个函数调用一个返回Future [T]类型结果的函数.我需要在递归函数调用中传递映射结果.我希望这是尾递归,但地图(或flatMap)打破了这样做的能力.我收到错误"递归调用不在尾部位置."

以下是此方案的一个简单示例.如何修改它以便调用尾部递归(不用Await.result()来破坏Futures的好处)?

import scala.annotation.tailrec
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._

implicit val ec = scala.concurrent.ExecutionContext.global

object FactorialCalc {
  def factorial(n: Int): Future[Int] = {

    @tailrec
    def factorialAcc(acc: Int, n: Int): Future[Int] = {
      if (n <= 1) {
        Future.successful(acc)

      } else {
        val fNum = getFutureNumber(n)
        fNum.flatMap(num => factorialAcc(num * acc, num - 1))
      }
    }

    factorialAcc(1, n)
  }

  protected def getFutureNumber(n: Int) : Future[Int] = Future.successful(n)
}

Await.result(FactorialCalc.factorial(4), 5.seconds)
Run Code Online (Sandbox Code Playgroud)

recursion dictionary scala future tail

18
推荐指数
1
解决办法
7674
查看次数

在O(1)打开的文件描述符中迭代scala/java中的文件

似乎nio .list返回一个流,当流消耗时,每个文件迭代一个文件描述符,直到.close在整个流上调用.这意味着包含超过1,000个文件的数据目录可以轻松刷新常用ulimit值.此文件描述符累积的整体效果在处理嵌套遍历时进一步加剧.

什么可能是迭代大型目录文件的替代方法,而不是生成对OS文件列表命令的调用?如果迭代大目录的文件将是很酷的,只有当前迭代的文件才能维护文件描述符,正如适当的流语义所暗示的那样.

编辑:

list返回一个java流,java.nio.file.Path其中api调用将用于在流处理后关闭流上的每个项目,而不是仅在整个流被关闭时,以进行更精简的迭代?在Scala中,这可以很容易地利用好文件API的包装,从领先拨弄这里.

java nio scala

15
推荐指数
1
解决办法
836
查看次数

Google Spreadsheets:仅复制过滤/过滤视图行

我有两张表,联系人和邮件程序

需要将Google电子表格上的过滤/过滤视图后面的联系人:B列中的可见单元格复制到Mailer的A列.

由于行的可见性还没有开放功能,我该怎么做?我不想编写许多FILTER()代码,因为过滤器可以不断更改,它们将由用户定义...结果将始终在B列中.

请让我知道解决方案/解决方法.

最坏情况场景:在打开行可见性功能之前,我们必须手动将单元格从一个工作表复制到另一个工作表,但我希望避免这样做:)

谢谢

google-sheets google-apps-script google-spreadsheet-api

14
推荐指数
2
解决办法
3万
查看次数

在Java(或Scala)中过滤向上路径遍历

是否有任何的标准库的方法,可以筛选出的路径,其中包括特殊遍历序列,如../和向上目录遍历所有其他回旋形式,从遍历维护文件路径API输入向上给定的"根"的路径?

我有一个包含根文件夹值成员的类,以及一个接受递归删除路径的成员函数.我的目标是使这个API安全,过滤掉提供给它的任何输入路径 - 这将转换为根文件夹值以上的路径.目的是这个类将被广泛用于删除根路径下的文件,但它永远不会触及根路径上的任何东西.

这类似于更广泛的路径遍历攻击.

方法太多的限制(即可能导致假阴性)可能是罚款,我的具体使用情况,如果此简化了的事情,而且,我目前的需求是文件系统路径不是网络的人(虽然,对于相当于一个Web模块在理论上可以在这里工作).

java owasp secure-coding path-traversal

13
推荐指数
2
解决办法
5929
查看次数

如何避免使用logback进行双重日志记录?

在我的应用程序中,我想以特定的方式记录来自我自己的代码的一些消息,与记录的所有其他消息相比.但是我不确定如何避免它们也自动登录到logack根记录器.

使用下面的配置,我想使用如下代码(scala),以便我只能将某些消息记录到该记录器.

val logger: Logger = LoggerFactory.getLogger("data-logger")
Run Code Online (Sandbox Code Playgroud)

但是在下面的配置中,这些消息会被记录两次,即根记录器也会记录它们.我怎么能避免这种情况?我是否必须人为地使用不同的日志记录级别来完成具有logback的事情?

<configuration>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/activity.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>activity.%i.log.zip</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <!-- use discarding threshold of zero to avoid ignoring INFO level messages see docs -->
    <discardingThreshold>0</discardingThreshold>
      <appender-ref ref="FILE" />
  </appender>

  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ASYNC" />
  </root>

  <logger name="data-logger" level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ASYNC" />
  </logger>

</configuration>
Run Code Online (Sandbox Code Playgroud)

java logging scala logback

12
推荐指数
1
解决办法
5541
查看次数

System.out.println的输出在gradle测试中的位置是什么?

System.out.println的输出在gradle测试中的位置是什么?

我的样本测试定义如下:

import org.junit.Test;
import static org.junit.Assert.*;

    public class LibraryTest {
        @Test public void NaiveScenarioTest() {
          System.out.println("java sample scenario started");
          SampleScenario s = new SampleScenario("sample");
        }
    }
Run Code Online (Sandbox Code Playgroud)

运行gradle test,我得到所有成功指标,但println的stdout输出不会显示在终端或gradle的html报告中.而这是只在需要进行快速调试的情况下,我还是会更开心拥有标准输出重定向显眼的地方,最好是显示终端为我gradle test.

什么是最简单或最好的建议?

gradle

12
推荐指数
1
解决办法
3893
查看次数

组织多个scala相互关联的sbt&git项目 - 最佳实践建议

随着scala使用sbt的构建和git版本控制,这将是组织你的团队的代码时,它会跨出是单个项目的好方法?在某些时候,您开始考虑将代码分离到单独的库或项目中,并根据需要在它们之间进行导入.你会如何为此组织事情?或者你会避免诱惑,只管理同一个sbt和git单一"项目"下的所有包裹?

兴趣点是:(随意改变)

  • 避免发明过度设计想象力的新"头痛".
  • 仍然能够在你想要的时候轻松地构建所有东西,在给定的开发机器上或者CI server.
  • 生产包装:能够用来SbtNativePackager包装您的产品,而不会产生太多的痛苦.
  • 轻松控制您在给定开发机器上使用的每个库的哪个版本,并能够无缝地在它们之间切换.
  • 避免git操作变得比它通常更糟糕.

此外,您是否会使用某种"本地sbt/maven团队存储库"以及可能需要做些什么才能实现这一目标?希望这不是必要的.

谢谢!

git scala sbt sbt-native-packager

11
推荐指数
1
解决办法
1575
查看次数