标签: java-stream

在 Java 中流到 IntStream

我有一个 ArrayList list,其中包含90, 80, 75要转换为 IntStream 的值。
我曾尝试使用 function list.stream(),但我遇到的问题是,当我尝试使用 lambda 时,例如:
list.stream().filter(x -> x >= 90).forEach(System.out.println(x);
它不会让我执行操作,因为它是常规流,而不是 IntStream。基本上这行应该做的是,如果 90 在列表中,则将其打印出来。

我在这里缺少什么?我不知道如何将 Stream 转换为 IntStream。

java lambda java-stream

0
推荐指数
1
解决办法
2427
查看次数

如何按对流的键分组

假设我有以下流:

...
import javafx.util.Pair;
...
Pair[] testPairs = {
        new Pair<>("apple", "James"),
        new Pair<>("banana", "John"),
        new Pair<>("grapes", "Tom"),
        new Pair<>("apple", "Jenkins"),
        new Pair<>("banana", "Edward"),
        new Pair<>("grapes", "Pierre")
};

Map<String, List<String>> result1 = Arrays.stream(testPairs)...;

Map<String, String> result2 = Arrays.stream(testPairs)...;
Run Code Online (Sandbox Code Playgroud)

对于result1,我想按对的键进行分组并获取所有对应的名称。对于result2,我想按键分组并获取字符串列表中的任何一个(前一个结果)。

如何通过使用 java 8 stream api 来实现这一点?

java java-stream

0
推荐指数
1
解决办法
1782
查看次数

Java Map&lt;String,String[]&gt; 如何对值求和

我有这样一个地图,Map<String,String[]>我想总结它的值,值是字符串表,我知道它们是数字。请告诉我如何使用流来做到这一点。我试过了 :

Map<String, String[]> map = new HashMap<>();
int sum = map.values().stream().mapToInt(Integer::parseInt).sum();
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

0
推荐指数
1
解决办法
264
查看次数

Java 中的流比原生 for 循环慢得多 - 为什么?

据我所知,流比传统的旧编程更快。

但是,当我运行以下代码时,结果出乎我的意料。

public class Application {
    public static void main(String[] args) {
        long startTime = System.nanoTime();
        int[] a = { 1, 2, 3, 4 };
        int m = Arrays.stream(a).reduce(Integer.MIN_VALUE, Math::max);
        long endTime = System.nanoTime();
        long totalTime = endTime - startTime;
        System.out.println(totalTime);

    }
}
Run Code Online (Sandbox Code Playgroud)

输出为:22857304

public class Application {
        public static void main(String[] args) {
        long startTime = System.nanoTime();
        int[] a = { 1, 2, 3, 4 };
        int e = a.length;
        int m = Integer.MIN_VALUE;
        for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

0
推荐指数
1
解决办法
369
查看次数

内部迭代的好处

我只是想知道,内部迭代与外部迭代的真正好处是什么,以及为什么最好使用内部操作(至少我听到的是这样)。是否也可以在内部迭代集合时删除集合的元素?就像在代码示例中一样:

我知道内部迭代的代码可读性更好,但是还有其他一些好处,比如性能改进吗?

//List with Strings of Fruit-Names
      Iterator i = aList.iterator();
      String str = "";
      while (i.hasNext()) {
         str = (String) i.next();
         if (str.equals("Orange")) {
            i.remove();
            System.out.println("\nThe element Orange is removed");
            break;
         }
      }
Run Code Online (Sandbox Code Playgroud)

java iteration internals java-stream

0
推荐指数
1
解决办法
158
查看次数

Java 8 -&gt; Collectors.toMap -&gt; 重复键

我正在尝试将Listavailable转换Currency为 a Map,要根据货币数字代码进行查找,我想获取字符串代码。这是代码。

但是上面的代码抛出以下错误,我对 Java 8 很陌生,因此我很头疼:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalStateException: Duplicate key YUM
    at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
    at java.util.HashMap.merge(HashMap.java:1254)
    at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
    at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1556)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
Run Code Online (Sandbox Code Playgroud)

但是上面的这段代码抛出了错误,我对 Java 8 很陌生,因此我很头疼

public class IsoCurrencyCode {

  private static final Set<Currency> ISO_CURRENCY = Currency.getAvailableCurrencies();

  private static final Map<Integer, Currency> NUMERIC_MAP = ISO_CURRENCY.stream().collect(Collectors.toMap(Currency::getNumericCode, Function.identity()));

  public static void main(String[] args) {
    //
    Currency currency = NUMERIC_MAP.get(971);
    System.out.println(currency.getCurrencyCode());
  } …
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

0
推荐指数
1
解决办法
3318
查看次数

Java基于double值对对象进行流排序

我有X1对象列表并尝试根据obj_function()返回Double值的方法对列表进行排序。

result = custom_obj_list.stream()
    .sorted((x1,x2) -> {
        return -x1.obj_function().compareTo(x2.obj_function());
    }).filter((x2) -> { 
        return x2.obj_function <= 1; 
    }).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但我正在努力解决以下错误消息

stream().sorted() 无法解析符号或无法解析方法

java lambda java-stream

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

使用 Java 流和 groupingBy 创建嵌套映射

鉴于以下代码:

  private enum TheA {
    AA,
  }

  private class TheB {
    String b;
  }

  private enum TheC {
    CC,
  }

  private class Rule {
    TheA a;
    TheB b;
    TheC c;

    public TheA getA() {
      return a;
    }

    public TheB getB() {
      return b;
    }

    public TheC getC() {
      return c;
    }
  }

  private Map<TheA, Map<TheB, Set<TheC>>> createView(Set<Rule> rules) {
    Map<TheA, Map<TheB, List<Rule>>> value =
        rules.stream().collect(groupingBy(Rule::getA, groupingBy(Rule::getB)));
    return value;
  }
Run Code Online (Sandbox Code Playgroud)

我想要createView类型检查的类型。目前,我可以根据需要获取嵌套地图,但缺少的是从Set<Rule>到Set<TheC>. 作为额外的奖励,我还希望整个结构是不可变的,因为它仅代表我的数据的特定视图。

java java-stream

0
推荐指数
1
解决办法
53
查看次数

Collectors.toMap() 中 Map 的默认值

需要转换List<Object>到Map<String,Long>使用与长期价值为零Collectors.toMap()。

这里的 Object 指的是我自己定义的 java 类。

List<Test> list = new ArrayList<Test>(); list.add(X); list.add(Y);
Map<String,Long> map = list.stream().collect(Collectors.toMap(Test:getName,XXXX)));
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

{"x",0},{"Y",0}
Run Code Online (Sandbox Code Playgroud)

java collections java-8 java-stream

0
推荐指数
1
解决办法
713
查看次数

如何找出 IntStream 中缺少哪些数字

我想返回一个由没有出现在任何参数编号中的数字(按升序)组成的字符串。我不知道这应该怎么做,但我想使用 long 作为比较器来找出 IntStream 中丢失的数字。

例如,如果numeros = [1201, 23045],我必须返回“6789”

我的代码:

public static String digitosQueNoEstanEn(List<Long> numeros)
{
    long n = 1234567890;
    IntStream numStream = numeros.stream()
        .map(c -> c.toString())
        .flatMapToInt(c -> c.chars())
        .distinct();
Run Code Online (Sandbox Code Playgroud)

java algorithm java-stream

0
推荐指数
1
解决办法
96
查看次数