小编mar*_*hon的帖子

散列映射中对象的这种延迟初始化模式是否是线程安全的?

我想尽可能避免锁定读取.但这种"感觉"就像是双重检查锁定,即使没有涉及部分初始化的成员.

这是一个很好的结构吗?

private final Map<String, Stuff> stash = new HashMap<String, Stuff>();

public Stuff getStuff(String name) {

    if (stash.containsKey(name))
        return stash.get(name);

    synchronized(stash) {
        if (stash.containsKey(name)) {
            return stash.get(name);
        }
        else {
            Stuff stuff = StuffFactory.create(name);
            stash.put(name, stuff);
            return stuff;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading locking hashmap

2
推荐指数
1
解决办法
1321
查看次数

给定一系列整数,将数组从中间分割成两个短数组的最有效方法是什么?

令我震惊的是必须有一个聪明的方法来做到这一点.这不适用于家庭作业,工作或任何事情.我只是在使用具有数据交错的文件格式.

所以,在通用的C/C++中,(或其他)给出一些数组

int x[] = ...
Run Code Online (Sandbox Code Playgroud)

是否有一种聪明的方法将它分成两个短阵列

short sa1[], sa2[]
Run Code Online (Sandbox Code Playgroud)

这样int数组就从中间分割出来了

x[i] = 1111111111111111 1111111111111111
             sa1[i]         sa2[i]
Run Code Online (Sandbox Code Playgroud)

编辑:对不起,如果没有措辞.对于int数组的每个第i个元素,最左边的16位成为一个数组的第i个元素,最右边的16位成为第二个数组的第i个元素.

如此给定

x[i] = 0001111111111111 1111111100011111
Run Code Online (Sandbox Code Playgroud)

然后

sa1[i] = 0001111111111111
sa2[i] = 1111111100011111
Run Code Online (Sandbox Code Playgroud)

我正在寻找不明显的答案,这些答案不会遍历每个元素,并且会移动并屏蔽每个元素.这很简单 :)

c c++ arrays algorithm

2
推荐指数
1
解决办法
497
查看次数

如何对通常的时间范围进行建模,以允许任何时间段或更具体的时间段的范围

想象一下,如果您想要建模非分数时间范围,可以是以下任何一种:

"1 hour" (all/any 1 hour period)
"1 hour, starting 1pm")  (all/any 1 hour periods that start at 1pm)
"1 hour, starting 1pm, on Wednesdays" (all/any 1 hour periods that start at 1pm on wednesdays)
"1 hour, starting 1pm, on 3rd Wednesday in November"
"1 week, starting the first week in November"
Run Code Online (Sandbox Code Playgroud)

你明白了.另一个目标是轻松有效地计算这些范围的重叠和子集.例如"1小时,从星期三下午1点开始"与"1小时,从下午1点开始"重叠

附加信息:这适用于基线系统中的时间段.我希望基线段具有多个粒度的时间段.与下午1点的任何1小时时段的基线或11月3日星期三下午1点开始的1小时时段的基线一样.

另外一个考虑因素是这些基线周期将存储在无sql存储中,并且以存储中存在的最小粒度有效地细化周期将是很好的.(特定的日 - 周 - 小时期间是否存在?不,周小时怎么样?,不是?如何只是一小时的时间段 - 如果这是有道理的.也许是某种树状的层次结构.

编辑:存储和查询部分可能是最重要的要求.将存储数十亿个时间段,并且需要尽可能快地查找它们(找到最精细的粒度).我很乐意为了提高速度而牺牲完整性.

编辑:考虑更多,以及如何将其存储在数据存储区中,树状结构可能有利于高效查找.我可以沿着树走下去,以获得最好的粒度.

          1hr
          /
       1hr@1pm
       /
     1hr@1pm@wednesday
     /
   1hr@1pm@wednesday@November
Run Code Online (Sandbox Code Playgroud)

这就是我想出来的,但我觉得它很弱.我将继续摆弄它并在这里进行更新,但我很想知道是否有人有更聪明的方法对此进行建模.

public class DateRange {

    Integer fTimeSpan;
    TimeUnit …
Run Code Online (Sandbox Code Playgroud)

java time data-modeling baseline

2
推荐指数
1
解决办法
702
查看次数

你怎么能在clojure中模拟测试中的宏?

我想在命名空间中模拟一个宏.

例如,clojure.tools.logging/error.

我试着with-redefs没有运气

(def logged false)

(defmacro testerror
  {:arglists '([message & more] [throwable message & more])}
  [& args]
  `(def logged true))

(deftest foo
 ...
 (with-redefs
      [log/error testerror]
   ...
Run Code Online (Sandbox Code Playgroud)

这给了这个错误: CompilerException java.lang.RuntimeException: Can't take value of a macro

macros unit-testing clojure

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

如何使用java lambdas将n个字符追加到字符串中?

基本上我想看看是否有一种紧凑的lambda方式:

int n = ...
String s = "";
for (int i = 0; i < n; i++) {
  s += 'a';
}
Run Code Online (Sandbox Code Playgroud)

开始很容易,然后我迷路了:

IntStream.range(0, n). ??
Run Code Online (Sandbox Code Playgroud)

java lambda

2
推荐指数
1
解决办法
87
查看次数

解析器表达式语法 - 如何匹配排除单个字符的任何字符串?

我想写一个与文件系统路径匹配的PEG.路径元素是除/posix linux 之外的任何字符.

在PEG中有一个表达式来匹配any字符,但我无法弄清楚除了一个字符之外如何匹配任何字符.

我正在使用的peg解析器是PEST for rust.

grammar parsing peg rust

2
推荐指数
1
解决办法
345
查看次数

不能应用一元运算符`-`来键入`usize`

我正在尝试编译一些较旧的Rust代码,并在这段代码上:

const SOMETHING: *const c_char = -1 as *const c_char;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

error: cannot apply unary operator `-` to type `usize`
  --> src/lib.rs:32:34
   |
32 | const SOMETHING: *const c_char = -1 as *const c_char;
   |         
Run Code Online (Sandbox Code Playgroud)

我怀疑这是因为c_char无符号和无符号不能为负,但我不知道如何解决它.此代码适用于一些未知的旧版Rust.我尝试c_char改为i8只是为了好玩,但是没有用.

rust

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

如何在循环中使用链式生成器模式而不产生编译器错误?

您如何正确使用期望在循环中链接方法的构建器模式?使用log4rs中的示例。注意self不是中的参考appender

//builder pattern from log4rs

pub struct ConfigBuilder {
    appenders: Vec<Appender>,
    loggers: Vec<Logger>,
}

impl ConfigBuilder {
    pub fn appender(mut self, appender: Appender) -> ConfigBuilder {
        self.appenders.push(appender);
        self
    }
}
Run Code Online (Sandbox Code Playgroud)

在下面执行此操作会导致错误,因为(我认为)cb正在移至所返回的内存中.appender()

let cb = ConfigBuilder::new();
for x in ys {
    cb.appender(x);
}
Run Code Online (Sandbox Code Playgroud)

这似乎在工作。这是唯一的方法吗?

let mut cb = ConfigBuilder::new();
for x in ys {
    cb = cb.appender(x);
}
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
152
查看次数

获取错误"特征`std :: ops :: FnMut <(char,)>`没有为`std :: string :: String`"实现简单类型不匹配

    let mystring = format!("the quick brown {}", "fox...");
    assert!(mystring.ends_with(mystring));
Run Code Online (Sandbox Code Playgroud)

错误:

the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
Run Code Online (Sandbox Code Playgroud)

改变mystring.ends_with(mystring)mystring.ends_with(mystring.as_str())修复它.

为什么这个错误如此神秘?

如果我在不使用格式的情况下创建字符串,请说:

let mystring = String::from_str("The quick brown fox...");
assert!(mystring.ends_with(mystring));
Run Code Online (Sandbox Code Playgroud)

错误更容易理解:

error[E0599]: no method named `ends_with` found for type
`std::result::Result<std::string::String, std::string::ParseError>`
in the current scope
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
1545
查看次数

为什么我得到"未使用的结果必须使用...结果可能是一个Err变体,应该处理",即使我正在处理它?

fn main() {
    foo().map_err(|err| println!("{:?}", err));
}

fn foo() -> Result<(), std::io::Error> {
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

结果:

warning: unused `std::result::Result` that must be used
 --> src/main.rs:2:5
  |
2 |     foo().map_err(|err| println!("{:?}", err));
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(unused_must_use)] on by default
  = note: this `Result` may be an `Err` variant, which should be handled

    Finished dev [unoptimized + debuginfo] target(s) in 0.58s
     Running `target/debug/playground`
Run Code Online (Sandbox Code Playgroud)

游乐场链接

rust

2
推荐指数
1
解决办法
1142
查看次数