标签: java-stream

为什么我不能在收集器中将 Function.identity 引用为方法引用

有人可以建议,为什么我不能在这里应用方法参考?

工作代码。

System.out.println(
                Arrays.stream(str.split(" "))
                        .collect(Collectors.groupingBy(Function.identity(),Collectors.counting())));  
Run Code Online (Sandbox Code Playgroud)

编译错误,无法解析方法

System.out.println(
            Arrays.stream(str.split(" "))
                    .collect(Collectors.groupingBy(Function::identity,Collectors::counting)));
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream method-reference collectors

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

Java Stream 过滤器是否比条件 DB MySQL 查询更快?

如果我想从表中获取数据并稍后对其进行过滤,是否比运行有条件的 MySQL 查询更好?

例子 -

  1. list.stream.filter(x-> x.getSalary() > baseSalary).collect(Collectors.toList());

  2. select * from employees where salary > 10000; , 通过 JPA 运行此查询。

哪个更快?我们应该依赖数据库引擎来获得更快的结果还是在我们的代码中处理它会更好。以上只是一个例子,请不要认为这是实时的。

java mysql java-stream

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

“Stream 类型中的 generate(Supplier<? extends T>) 方法不适用于参数 (int)”,List = Stream.generate()

我正在尝试生成一个随机的整数列表,如下所示:

private static int nextElement() {
    Random r = new Random();
    return r.nextInt(100);
}

public static void main(String[] args) {
    Integer[] integers = Stream.generate(nextElement())
                            .limit(200)
                            .toArray(Integer[]::new);
}
Run Code Online (Sandbox Code Playgroud)

该错误在 下显示为红色波浪线generate,说明如下:

The method generate(Supplier<? extends T>) in the type Stream is not 
 applicable for the arguments (int)
Run Code Online (Sandbox Code Playgroud)

我认为这意味着for的返回类型nextElement()不能是 an int,但我可能错了。如何修复此代码,以便可以生成随机整数列表?

java list java-stream

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

如何将字符串列表映射到空列表?

我有一组 String 并且想将它们中的每一个映射到一个空列表然后返回。我知道 for 循环可以解决它,但是有没有使用 Java Stream 的好方法?

例如:我有一组 {"a", "b", "c"}

我想返回一张地图Map<String, List<Object>>,就像{"a": emptyList(), "b": emptyList(), "c": emptyList()}

java java-stream

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

在 Java 8 流中,如何过滤掉不是枚举有效值的字符串?

我有一个枚举我通话Permission的安全权限,此事对我的申请。在数据库中,用户可能拥有与我的应用程序无关的其他权限。从数据库读取用户时,我得到 aList<String>并且我想建立 a List<Permission>,忽略那些不是枚举值的字符串。

public enum Permission { ADMIN, USER }

List<String> plaintextAuthorities = List.of("ADMIN","USER","COFFEEMAKER")

List<Permission> appPermissions = plaintextAuthorities.stream()
        .map(Permission::valueOf) // this will throw an IllegalArgumentException for 'COFFEEMAKER'
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

问题是该map步骤在到达与枚举值不对应的字符串之一时将引发异常。我怎样才能filter去掉这些值,以便在不抛出异常的情况下悄悄地忽略它们?

java enums filtering exception java-stream

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

Java按字母顺序对字符串进行排序并保持ASCII顺序

名单是: Arrays.asList("Za", "ab", "AB", "Sa", "1ab", "Ab", "!Ab");

如果我用stream().sorted()那么命令是:!Ab 1ab AB Ab Za ab--> 前面的ab不应该za。

如果我用sorted(String.CASE_INSENSITIVE_ORDER)那么顺序是!Ab 1ab ab AB Ab Za--> 这个时候,AB在ab后面。

有什么方法可以将这两个规则结合起来,以便我们按字母顺序排列列表并且大写大于小写?


添加示例:1AB - A0B - AbD - aBD - abd1 - ZAB 按字母顺序排序(Z 永远不会在 a 前面)和数字 > 大写 > 小写 ( AbD > aBD)

java sorting java-stream

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

How to filter map of map using java stream

How can I filter map of map using java stream. I can do it using double loop but I think this is not efficient.

public class MapUsage {
    static Map<Integer, Map<Integer, String>> parentMap = new HashMap<>();
    static Map<String, String> userRole = new HashMap<>();

    public static void main(String ... args){
        initializeData();
        displayMapForUser("user1", parentMap);
//        printMap(parentMap);

    }


    private static void displayMapForUser(String user1, Map<Integer, Map<Integer, String>> parentMap) {
        Integer role = new Integer(userRole.get(user1));
        Map<Integer, Map<Integer, String>> userMap = new HashMap<>();
        Map<Integer, String> childMap …
Run Code Online (Sandbox Code Playgroud)

java java-stream

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

我用不同的方法实现了相同的功能,有人能告诉我为什么我的最后一个功能不打印假吗?

public static void main(String[] args) {         
  System.out.println(hasPairWithSum(new int[] { 12, 4, 3, 4, 1, 7 }, 9));        
  System.out.println(hasPairWithSum2(new int[] { 12, 4, 3, 4, 1, 7 }, 9));       
  System.out.println(hasPairWithSum3(new int[] { 12, 4, 3, 4, 1, 7 }, 9));  
}

public static boolean hasPairWithSum(int[] intArray, int sum) {         
  int len = intArray.length;        
  for (int i = 0; i < len - 1; i++) {
        for (int j = i + 1; j < len; j++) {
                if (intArray[i] + intArray[j] …
Run Code Online (Sandbox Code Playgroud)

java lambda java-stream

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

在 Java 中将 List&lt;String&gt; 转换为 Map&lt;String, String&gt;

我想将列表转换为地图,其中键只是一个计数器,它需要遵守列表的顺序。我目前有这个代码:

private static Map<String, String> convertListToMap(final List<String> list) {
    AtomicInteger counter = new AtomicInteger(0);
    Map<String, String> map = list.stream().collect(Collectors.toMap((c) -> {
        Integer integer = counter.incrementAndGet();
        return integer.toString();
    }, (c) -> c));

    return map;
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 在我桌面上的一个简单的控制台应用程序测试中,计数器保留了列表的顺序。我们可以确定订单在其他任何地方执行时都会保留吗?
  2. 有没有更好的方法来编码?

java list hashmap java-stream

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

如何使用 Java 流在第一个和最后一个嵌套对象之间创建 map&lt;k,v&gt;?

假设我有以下课程:

class A {
    int id;
    List<B> b;
}

class B {
    int id;
}
Run Code Online (Sandbox Code Playgroud)

我想在 A.id 到 B.id 列表(Map<Integer, List<Integer>>,其中 key = A.id,并List<Integer>对应于每个 A 的 B.id 字段列表)之间创建一个映射。我尝试了Collectors.groupingBy和 的各种组合Collectors.mapping,但没有效果。有人可以帮我吗?

java java-8 java-stream

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