小编Mat*_*ter的帖子

Java8 Streams - 删除具有Stream Distinct的重复项

我有一个流如:

Arrays.stream(new String[]{"matt", "jason", "michael"});
Run Code Online (Sandbox Code Playgroud)

我想删除以相同字母开头的名称,以便只留下以该字母开头的一个名称(无关紧要).

我试图了解该distinct()方法的工作原理.我在文档中读到它基于对象的"等于"方法.但是,当我尝试包装String时,我注意到从不调用equals方法,也没有删除任何内容.这里有什么我想念的吗?

包装类:

static class Wrp {
    String test;
    Wrp(String s){
        this.test = s;
    }
    @Override
    public boolean equals(Object other){
        return this.test.charAt(0) == ((Wrp) other).test.charAt(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一些简单的代码:

public static void main(String[] args) {
    Arrays.stream(new String[]{"matt", "jason", "michael"})
    .map(Wrp::new)
    .distinct()
    .map(wrp -> wrp.test)
    .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

java string java-8 java-stream

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

动态分配算法

我整个上午一直在绞尽脑汁想要提出以下算法,这尤其令人沮丧,因为我确信这是可能的.

我需要的是一个具有返回功能的类boolean.它可以被调用任意次,并且将返回true XX%.这不能是随机分布,例如:

如果比率X设置为0.6并且函数被调用100次数,我们需要返回完全60正确的结果.使用"遗留"的顺序无关紧要,例如:如果函数被调用99次数,则可以返回任一值5960真值.

这里的诀窍是比率需要变化.

对于某些设置,我正在多线程环境中工作,因此我将"hitNumber"变量保留在一个AtomicLong中,以避免出现synchronization问题.

谢谢!

java algorithm concurrency

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

标签 统计

java ×2

algorithm ×1

concurrency ×1

java-8 ×1

java-stream ×1

string ×1