小编Ral*_*lph的帖子

如何将字符串的 HashSet 转换为向量?

我正在尝试将 a 转换HashSet<String>为一个排序向量,然后可以join用逗号进行编辑:

use std::collections::HashSet;

fn main() {
    let mut hs = HashSet::<String>::new();
    hs.insert(String::from("fee"));
    hs.insert(String::from("fie"));
    hs.insert(String::from("foo"));
    hs.insert(String::from("fum"));

    let mut v: Vec<&String> = hs.iter().collect();
    v.sort();

    println!("{}", v.join(", "));
}
Run Code Online (Sandbox Code Playgroud)

这不会编译:

use std::collections::HashSet;

fn main() {
    let mut hs = HashSet::<String>::new();
    hs.insert(String::from("fee"));
    hs.insert(String::from("fie"));
    hs.insert(String::from("foo"));
    hs.insert(String::from("fum"));

    let mut v: Vec<&String> = hs.iter().collect();
    v.sort();

    println!("{}", v.join(", "));
}
Run Code Online (Sandbox Code Playgroud)

我明白为什么我不能加入Vec<&String>,但我怎样才能将 转换HashSet为 a Vec<String>,以便它可以加入?

在 Rust 中打印由空格分隔的迭代器的惯用方法什么?似乎并不适用,因为迭代器Args返回String值,不像迭代器HashSet返回&String …

vector hashset rust borrowing

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

在Clojure中重复向量

我是一个Clojure新手.我想获得两份卡套装的副本.我能想到的非DRY方式是

(def suits [:clubs :diamonds :hearts :spades])
(def two-times (concat suits suits))
Run Code Online (Sandbox Code Playgroud)

必须有更多功能的方式(即使它需要更多的字符:-)).如果我想要N次怎么办?有什么建议?

我试过的所有事情,比如

(replicate 2 suits)
Run Code Online (Sandbox Code Playgroud)

导致两个单独的向量:

([:clubs :diamonds :hearts :spades] [:clubs :diamonds :hearts :spades])
Run Code Online (Sandbox Code Playgroud)

如何"压扁"结构?

sequences clojure playing-cards

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

Clojure:从序列中查找顺序项

在Clojure程序中,我有一系列数字:

(2 3 4 6 8 1)
Run Code Online (Sandbox Code Playgroud)

我想找到项目顺序的最长子序列:

(2 3 4)
Run Code Online (Sandbox Code Playgroud)

我假设它将涉及(take-while ...)(reduce ...).

有任何想法吗?

澄清:我需要最长的连续项目列表.我更确定,更容易.感谢我解决我最初提出的更难的问题.

reduce clojure

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

早期从Scala构造函数返回

我正在为我的"main"类编写构造函数.它做的第一件事是调用一个方法来使用commons-cli来解析命令行.如果parseOptions方法返回false,则发生错误,构造函数应退出.

我尝试编写以下代码

if (!parseOptions(args)) return
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨我有一个"返回方法定义之外的语句".

如果没有调用System.exit(1)或反转布尔值(并将所有其余的逻辑放在if语句中,有没有办法从构造函数中"提前"返回?

我想我可以让parseOptions方法抛出IllegalArgumentException并在我的Main对象中捕获它.

谢谢.

constructor scala exit

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

Clojure-idiomatic初始化Java对象的方法

我试图找到一种初学Java对象的Clojure-idiomatic方法.我有以下代码:

(let [url-connection
      (let [url-conn (java.net.HttpURLConnection.)]
        (doto url-conn
          (.setDoInput true)
          ; more initialization on url-conn
          )
        url-conn)]
  ; use the url-connection
  )
Run Code Online (Sandbox Code Playgroud)

但它似乎尴尬.

有什么更好的方法来创建HttpURLConnection对象并在以后在代码中使用它之前对其进行初始化?

更新:这似乎(doto ...)可以派上用场:

(let [url-connection
        (doto (java.net.HttpURLConnection.)
          (.setDoInput true)
          ; more initialization
          ))]
  ; use the url-connection
  )
Run Code Online (Sandbox Code Playgroud)

根据doto文档,它返回它正在"做"的值.

java initialization idiomatic clojure

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

Map.Entry的Clojure类型提示

java.util.Map.Entry在Clojure 1.2中,嵌套静态内部类的类型提示的语法是什么?

我都尝试^Map/Entry^Map.Entry,也不进行编译.

clojure type-hinting

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

用于在工作线程中阻止Java Swing用户的模式

正如大多数Java程序员所知,Swing GUI的更新只应在AWT事件调度线程上完成,建议在"工作"线程上执行长时间运行的进程,并使用SwingUtilities.invokeAndWait()或将更新发送到事件调度线程SwingUtilities.invokeLater().

在长时间运行的过程完成后,如何阻止用户继续执行应用程序?你是否使控件灰显,然后让工作线程使用SwingUtilities上面提到的调用重新启用它们?

有更好的替代模式吗?

java concurrency swing

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

抑制Java Findbugs错误(EI_EXPOSE_REP)

我有一个Java gettor方法,如下所示:

import java.util.Date;
//...
public Date getSomeDate() {
  return someDate;
}
Run Code Online (Sandbox Code Playgroud)

和Findbugs报告这暴露了一个可变对象:"可以通过返回对可变对象的引用来公开内部表示".我将代码更改为:

import java.util.Date;
//...
public Date getSomeDate() {
  return new Date(someDate.getTime());
}
Run Code Online (Sandbox Code Playgroud)

但Findbug仍然报告相同的漏洞.我还能做些什么来抑制/解决这个问题?我在IntellJ 10 Findbugs插件中运行Findbugs 1.3.9.

java findbugs date

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

将org.w3c.dom.NodeList转换为Clojure ISeq

我试图让新的句柄defprotocol,reify

org.w3c.dom.NodeList从XPath调用返回,我想将其"转换"为ISeq.

在Scala中,我实现了一个隐式转换方法:

implicit def nodeList2Traversable(nodeList: NodeList): Traversable[Node] = {
  new Traversable[Node] {
    def foreach[A](process: (Node) => A) {
      for (index <- 0 until nodeList.getLength) {
        process(nodeList.item(index))
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

NodeList包括方法int getLength()Node item(int index).

我如何在Clojure中做相同的操作?我希望我需要使用defprotocol.我需要定义哪些函数才能创建seq

如果我使用loop和做一个简单,天真的转换到列表recur,我将最终得到一个非惰性结构.

collections clojure

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

Maven中的多个测试集

我编写了一个REST服务器(在Java中使用RestEasy)和一个用Scala编写的单元测试套件.测试套件使用RestEasy提供的模拟服务器,并与每个Maven构建一起运行.

我想创建一个第二个功能测试套件,它调用一个实际的tomcat服务器并练习每个REST服务.我不希望这个新套件与每个构建一起运行,但只是按需,可能是用Maven的命令行参数控制的.

是否可以在Maven项目中创建多个独立的测试套件并禁用一些自动运行,或者我是否需要为此功能套件创建单独的Maven项目?如果这些测试与单元测试(不同目录)在同一个项目中,我如何隔离不同的功能套件代码?如何使用命令行参数运行选定的套件?

maven-2 unit-testing

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