相关疑难解决方法(0)

Java Streams:如何做一个有效的"独特和排序"?

让我们假设我有一个Stream<T>并且想要只获得不同的元素并进行排序.

天真的方法是做到以下几点:

Stream.of(...)
    .sorted()
    .distinct()
Run Code Online (Sandbox Code Playgroud)

或者,也许相反:

Stream.of(...)
    .distinct()
    .sorted()
Run Code Online (Sandbox Code Playgroud)

由于JDK的源代码无法实现这两者的实现,我只是想知道可能的内存消耗和性能影响.

或者编写我自己的过滤器会更有效率如下?

Stream.of(...)
    .sorted()
    .filter(noAdjacentDuplicatesFilter())

public static Predicate<Object> noAdjacentDuplicatesFilter() {
    final Object[] previousValue = {new Object()};

    return value -> {
        final boolean takeValue = !Objects.equals(previousValue[0], value);
        previousValue[0] = value;
        return takeValue;
    };
}
Run Code Online (Sandbox Code Playgroud)

java performance java-8 java-stream

21
推荐指数
1
解决办法
4478
查看次数

Java中的无限流并行处理

为什么下面的代码不打印任何输出,而如果我们删除并行,它打印0,1?

IntStream.iterate(0, i -> ( i + 1 ) % 2)
         .parallel()
         .distinct()
         .limit(10)
         .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

虽然我知道理想的限制应该放在不同之前,但我的问题更多地与添加并行处理引起的差异有关.

java parallel-processing java-8 java-stream

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

为什么我的字符串操作使用lambda表达式很慢?

方法将逗号分隔的单词作为a String并以逗号分隔的单词返回String自然排序顺序中的单词,不包含任何4个字母单词,包含UPPER大小写中的所有单词且不重复.与第二种方法相比,第一种方法相当慢.你能帮我理解为什么以及如何改进我的方法?

方法1:

public String stringProcessing(String s){
      Stream<String> tokens = Arrays.stream(s.split(","));
      return tokens.filter(t -> t.length() != 4) .distinct()
                   .sorted() 
                   .collect(Collectors.joining(",")).toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

方法2:

public String processing(String s) {
    String[] tokens = s.split(",");
    Set<String> resultSet = new TreeSet<>();
    for(String t:tokens){
        if(t.length() !=  4)
            resultSet.add(t.toUpperCase());
    }        
    StringBuilder result = new StringBuilder();
    resultSet.forEach(key -> {
        result.append(key).append(","); 
    });
    result.deleteCharAt(result.length()-1);
    return result.toString();
}
Run Code Online (Sandbox Code Playgroud)

java string lambda java-8

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