标签: java-stream

HashMap使用java 8流API的平均计数?

我有Map以下类型

public class MapUtils {

    private Map<String, Integer> queryCounts = new HashMap<>();

public void averageCounters(){

    int totalCounts = queryCounts.values().stream().reduce(0, Integer::sum);
    queryCounts = queryCounts.entrySet()
                             .stream()
                             .collect(Collectors.toMap(
                                 Map.Entry::getKey,
                                 (Map.Entry::getValue)/totalCounts
    ));
}
Run Code Online (Sandbox Code Playgroud)

这不会编译并在此行中显示错误(Map.Entry::getValue)/totalCounts.我该如何解决?有没有更好的方法来获得Map使用Java 8 API的平均值?

编辑:这是一个更好的方法吗?

queryCounts.entrySet()
           .forEach(entry -> queryCounts.put(entry.getKey(),
                                   entry.getValue()/totalCounts));
Run Code Online (Sandbox Code Playgroud)

dictionary java-8 java-stream

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

如何使用Lambda在java1.8中搜索字符串集合中的特定项?

我有一个项目集合

List<String> lstRollNumber = new ArrayList<String>();
lstRollNumber.add("1");
lstRollNumber.add("2");
lstRollNumber.add("3");
lstRollNumber.add("4");
Run Code Online (Sandbox Code Playgroud)

现在我想搜索RollNumber该集合中的特定内容.说

String rollNumberToSearch = "3";
Run Code Online (Sandbox Code Playgroud)

我可以通过循环遍历集合并检查每个项目来轻松完成,如果有任何匹配,我可以突破循环并从函数返回true.

但是我想使用Lambda表达式来做这件事.

在C#中我们使用(以及其他选项),

var flag = lstRollNumber.Exists(x => x == rollNumberToSearch);
Run Code Online (Sandbox Code Playgroud)

如何在Java 1.8中做同样的事情?

我试过了

String rollNumberToSearch = "3";
Stream<String> filterRecs = lstRollNumbers.stream().filter(rn -> rn.equals(rollNumberToSearch));
Run Code Online (Sandbox Code Playgroud)

但我知道这是错的?请指导.

java lambda java-8 java-stream

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

修改列表的一部分,然后返回更新的列表

我正在玩Java 8并尝试使用stream().我想实现的是说,我有一个名单[1,2,3,4],我要加倍的偶数2和4,然后用更新的值返回列表.所以,我会得到[1,4,3,8]结果.我试过以下但它只返回了[4,8].

List<Integer> myList =
            Arrays.asList(1,2,3,4);

    myList = myList
    .stream()
    .filter(n -> n%2==0)
    .map(n -> n*2)
    .collect(Collectors.toList());

    System.out.println(myList);
Run Code Online (Sandbox Code Playgroud)

有办法做我想要的吗?

java java-8 java-stream

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

groupingBy应该使用String时,将key作为Map返回

假设我有一个品牌对象列表.POJO包含一个返回字符串的getName().我想Map<String, Brand> 用String作为名称来构建一个 ...但我希望密钥不区分大小写.

如何使用Java流来完成这项工作?试:

brands.stream().collect(Collectors.groupingBy(brand -> brand.getName().toLowerCase()));
Run Code Online (Sandbox Code Playgroud)

不起作用,我认为是因为我没有正确使用groupBy.

java java-8 java-stream

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

使用Java8 Stream计算列表中的对象数

所以我试图仅使用Stream来计算ArrayList中的对象数.我正在使用stream.count但是只返回1,因为我的列表有多个对象.这是一些代码:

 static ArrayList<Person> people = new ArrayList<>();

  void loadCourses(){ // putting Person objects in the list }

  public void countPeople()
{
    Stream<ArrayList<Person>> stream1 = Stream.of(people); 
    long l = stream1.count();
    System.out.println("Number of people loaded: " + l);

}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏:)

java java-8 java-stream

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

使用其他列表中的值减少列表

是否可以根据其他列表中的条目减少列表?

这是类似的东西:

list1.forEach(l1 -> {
    list2.forEach(l2 -> {
        if (l1.getId() == l2.getId())
            reducedActions.add(l2); // that's the new list where the filtered entries should be add
    });
});
Run Code Online (Sandbox Code Playgroud)

编辑:我所感谢的:

l1: 10, 15, ,16
l2: 1, 2, 12, 10, 11, 14, 16
reducedActions: 10, 16
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

带有ForEach迭代问题的Java Stream

我有两种类型的处理实现.不确定为什么流forEach循环抱怨变量'i'必须是final.但如果最终,那么如何解决计算'i'的逻辑问题?

public static void main(String[] args) {
    String str = "123456789";
    int i = 0;
    //Non Stream
    for (char c : str.toCharArray()) {
        if (c >= 48 && c <= 57) {
            i = i * 10 + (c - 48);
        }
    }
    System.out.println(i);
     i = 0;
    // WHY compiler fails for variable 'i' here? 
    str.chars().forEach((c) -> {
        if (c >= 48 && c <= 57) {
            i = i * 10 + (c - 48);
        }
    });
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

java foreach java-8 java-stream

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

如何从条目流中生成地图?

鉴于s,一Stream<Map.Entry<K,V>>受s.map(Map.Entry::getKey).distinct().count() == s.count(),我应该怎么产生m,一个Map<K,V>受m.entrySet().equals(s.collect(Collectors::toSet()))?

换句话说,我应该如何根据我想要的条目流生成地图?

java java-8 java-stream

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

Java Lambda从列表中获取元素

我有以下代码,它使用好旧的java:

List<Bar> repo = ArrayList<>();
public Bar foo(int id) {
    for(Bar c: repo){
        if(c.getId() == id)
            return c;
    }
    Bar target = new Bar();
    target.setFooo("");
    target.setId(0);
    return target;
}
Run Code Online (Sandbox Code Playgroud)

但是,我试图让它变得更好一些(即只是想学习lambdas)

public Bar foo(int id) {
    Bar target = repo.stream().filter(c -> c.getId() == id)
               .findFirst().orElse(null);
    if(target == null){  
        target = new Bar();
        target.setFooo("");
        target.setId(0);
    }
    return target;
}
Run Code Online (Sandbox Code Playgroud)

但上面的代码返回一个ArrayOutOfBounds异常,我不确定如何(因为它是一个列表)或为什么.

java lambda java-8 java-stream

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

收集器:: toList循环推理

在下面的代码中Intellij说"循环推理"

List<String> rows = new ArrayList<>();
rows.add("12345");
rows.add("123");
rows.add("123456");
rows = rows.stream().filter(e -> e.length() > 4).collect(Collectors::toList);
rows.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

必须有一些Collectors::toList我无法理解的问题.

java java-8 java-stream

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

标签 统计

java-8 ×10

java-stream ×10

java ×9

lambda ×3

dictionary ×1

foreach ×1