小编Ste*_*bel的帖子

Java数组排序:快速获取数组索引的排序列表

问题:考虑以下浮点数[]:

d[i] =     1.7 -0.3  2.1  0.5
Run Code Online (Sandbox Code Playgroud)

我想要的是一个int []数组,它表示带索引的原始数组的顺序.

s[i] =       1    3    0    2
d[s[i]] = -0.3  0.5  1.7  2.1
Run Code Online (Sandbox Code Playgroud)

当然,可以使用自定义比较器,自定义对象的排序集,或者通过简单地对数组进行排序,然后搜索原始数组中的索引(颤抖)来完成.

我实际上正在寻找的是Matlab的sort函数的第二个返回参数的等价物.

有没有一种简单的方法(<5 LOC)?可能有一个解决方案,不需要为每个元素分配一个新对象?


更新:

谢谢你的回复.不幸的是,迄今为止提出的所有内容都不像我希望的简单而有效的解决方案.因此,我在JDK反馈论坛中打开了一个帖子,建议添加一个新的类库函数来解决这个问题.让我们看看Sun/Oracle对此问题的看法.

http://forums.java.net/jive/thread.jspa?threadID=62657&tstart=0

java arrays sorting class-library

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

在Java 8中删除Stream的第一个元素

我使用java.nio库中的Files.walk()方法在Java 8中生成了一个Stream.问题是该方法默认包括根路径,但我不想要这个元素.在这种情况下,我使用filter()方法解决了这个代码:

public void listFiles(String directoryPath) {
    try {
        Path root = Paths.get(directoryPath);
        Files.walk(root,1)
            .filter(x -> !x.equals(root))
            .forEach(System.out::println);
    } catch (IOException ex) {
        System.err.println("Error reading file: " + directoryPath);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果有一种更优雅的方法来删除Stream的第一个元素而不是这个.例如,使用Stream中的索引或使用tail()方法作为其他函数语言.

java functional-programming filter java.nio.file java-stream

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

如何将流变成可迭代的?

Stream继承一个iterator()方法来生成一个Iterator.

但我需要一个Iterable而不是一个Iterator.

例如,给定这个字符串:

String input = "this\n" +
        "that\n" +
        "the_other";
Run Code Online (Sandbox Code Playgroud)

...我需要将字符串的这些部分作为 anIterable传递给特定的库。调用input.lines()产生一个Stream. 所以如果我能把它Stream变成Iterable它的一个元素,我会很高兴的。

java iterable java-stream

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

Stream.findFirst与Optional.of不同?

可以说我有两个类和两个方法:

class Scratch {
    private class A{}
    private class B extends A{}

    public Optional<A> getItems(List<String> items){
        return items.stream()
             .map(s -> new B())
             .findFirst();
    }

    public Optional<A> getItems2(List<String> items){
        return Optional.of(
            items.stream()
                 .map(s -> new B())
                 .findFirst()
                 .get()
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么getItems2编译时getItems会出现编译器错误

incompatible types: java.util.Optional<Scratch.B> cannot be converted to java.util.Optional<Scratch.A>
Run Code Online (Sandbox Code Playgroud)

所以,当我返回get的值和使用编译器再次包装它时,会识别继承,但如果我直接使用结果,则不会.OptionalfindFirstOptional.offindFirst

java optional java-stream

21
推荐指数
3
解决办法
793
查看次数

使用Stream从对象列表中查找最常见的属性值

我有两个结构如下的类:

public class Company {
     private List<Person> person;
     ...
     public List<Person> getPerson() {
          return person;
     }
     ...
}

public class Person {
     private String tag;
     ...
     public String getTag() {
          return tag;
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

基本上,Company类有一个Person对象列表,每个Person对象都可以获得Tag值.

如果我得到Person对象的List,有没有办法使用来自Java 8的Stream来找到所有Person对象中最常见的一个Tag值(如果是平局,可能只是最随机的一个)共同)?

String mostCommonTag;
if(!company.getPerson().isEmpty) {
     mostCommonTag = company.getPerson().stream() //How to do this in Stream?
}
Run Code Online (Sandbox Code Playgroud)

java list java-8 java-stream

20
推荐指数
4
解决办法
2626
查看次数

Java 8 Streams - 超时?

我想循环一个庞大的数组并做一组复杂的指令需要很长时间.但是,如果超过30秒,我希望它放弃.

恩.

final long start = System.currentTimeMillis();
myDataStructure.stream()
    .while(() -> System.currentTimeMillis() <= start + 30000)
    .forEach(e ->
    {
      ...
    });
Run Code Online (Sandbox Code Playgroud)

如果满足某个条件,我想避免returnforEach通话中说话.

java java-8 java-stream

18
推荐指数
4
解决办法
3735
查看次数

Java Collectors.groupingBy()---是List命令?

对于Collectors.groupingBy()那个返回Map<K,List<T>>,它暗示List<T>是为了评估流?

我没有看到列表排序的明确描述,而并发版本明确表示没有排序.如果它没有以某种方式订购,我会期望它是一个收藏品,我不会看到除了收到订单之外的其他订单.

我希望保证每个列表中的最后一个值是该组收到的最后一个值.

java java-8 java-stream collectors

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

在java 8中从并行流中收集

我想获取输入并在其上应用并行流,然后我想输出为列表.输入可以是我们可以应用流的任何列表或任何集合.

我担心的是,如果我们想要输出作为映射它们,我们有一个来自java的选项就像

list.parallelStream().collect(Collectors.toConcurrentMap(args))
Run Code Online (Sandbox Code Playgroud)

但是我没有选择以线程安全的方式从并行流中收集以提供列表作为输出.我看到另外一个选项可供使用

list.parallelStream().collect(Collectors.toCollection(<Concurrent Implementation>))

通过这种方式,我们可以在collect方法中提供各种并发实现.但我认为java.util.concurrent中只存在CopyOnWriteArrayList List实现.我们可以在这里使用各种队列实现,但那些不会像列表一样.我的意思是我们可以解决这个问题.

如果我想要输出列表,你能指导一下最好的方法吗?

注意:我找不到与此相关的任何其他帖子,任何参考都会有所帮助.

java java.util.concurrent java-8 java-stream

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

使用Android Studio 3.0 Java 8内置功能替换Retrolambda

在我的项目中,我使用的是受欢迎的图书馆retrolambda.我刚刚下载了新的Android Studio 3.0 Canary 1.

我已经更新了我的项目以使用Gradle等新版本.一切都很好.

Android Studio 3中的新功能是为了支持某些Java8功能而构建的.新的AS3建议删除retrolambda并使用这些功能.

Retrolambda警告

我删除了retrolambda,Gradle构建成功但是应用程序崩溃了这个错误(在有lambda的地方)

E/UncaughtException: java.lang.NoSuchMethodError: No static method lambda$replace$2
Run Code Online (Sandbox Code Playgroud)

我在我的项目中使用RxJava2.我不确定这与它有关,但在我看来,Java8的内置功能看起来不起作用.也许我需要在"某个地方"设置一些东西?

我的项目设置在此输入图像描述

我的Gradle文件

根项目

   dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
        classpath 'com.google.gms:google-services:3.0.0'
        //classpath 'me.tatarka:gradle-retrolambda:3.6.1'
    }
Run Code Online (Sandbox Code Playgroud)

应用模块

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
    }
}

repositories {
    mavenCentral()
    maven { url "https://jitpack.io" }
}


apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.hugo'

...



    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.firebase:firebase-analytics:9.8.+'
    compile 'com.google.firebase:firebase-crash:9.8.+'
    compile 'com.google.android.gms:play-services-maps:9.8.+'
    compile 'com.google.android.gms:play-services-analytics:9.8.+'
    compile 'com.google.android.gms:play-services-auth:9.8.+'
    compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
    //Support Library

(...)

    compile …
Run Code Online (Sandbox Code Playgroud)

android retrolambda android-studio-3.0

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

如何在Java-8中正确查找流特性?

在进行流操作时,在中间/ pleleline操作期间,将创建具有不同特征的流(例如,SORTED/SIZED/DISTINCT/ORDERED) - 掌握Lambdas(第6章)

Stream.of(8,3,5,6,7,4)//ORDERED, SIZED
.filer(i->i%2==0) // ORDERED
.sorted() // ORDERED, SORTED
.distinct() // DISTINCT, ORDERED, SORTED
.map(i->i+1) // ORDERED
.unordered(); //none
Run Code Online (Sandbox Code Playgroud)

我们如何找出上面代码段中提到的流的不同特征?

java java-8 java-stream

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