小编Tag*_*eev的帖子

Java List <Map <String,Long >>映射键的组合之和

我有一个: List<Map<String, Long>> items = new ArrayList<>();

我想得到一个Map,其中键被分组,值是总和.

示例:列表

  • 项目0
    • foo - > 1
    • 吧 - > 2
  • 第1项
    • foo - > 4
    • 吧 - > 3

结果:地图

  • foo - > 5
  • 吧 - > 5

我知道如何以"长"方式执行此操作,但尝试使用java 8功能发现lambda/streaming/groupby方法.有什么想法吗?

java lambda java-8 java-stream

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

将哈希图拆分为Java 8中的分区

我有哈希图: Map<String, Set<String>> myMap

我想将其拆分为包含Map以下内容的列表:

List<Map<String,Set<String>>> listofMaps;
Run Code Online (Sandbox Code Playgroud)

,每张地图最多可包含100个键。我知道如何以常规方式执行此操作。(在entryset上进行foreach,每100个项目会创建一个新地图)。有什么选择可以用Java 8 lambda或其他东西吗?(有点像Lists.partitions()..)?

java collections hashmap java-8

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

使用流操作基于条件在Java中将List转换为Map

我正在尝试转换ListHashMap使用流.这是我的代码..

attributeUnitMap = attributesList.stream()
    .filter(a -> a.getAttributeUnit() != null)
    .collect(Collectors.toMap(Attribute::getAttributeName, a -> a.getAttributeUnit()));
Run Code Online (Sandbox Code Playgroud)

现在我想添加条件,如果我得到属性名称null,那么应该将项目添加到带有空白字符串的map中,如下所示(any_attributeName,"").

如何使用流操作实现此目的.我知道我可以通过使用过滤条件来检查属性名称是否为null但是如果它为null则可以添加空字符串.可能吗?如果没有,为什么呢?请帮忙.

java dictionary list java-8 java-stream

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

是否可以用java 8流替换一个简单的java for循环(带索引)

我想对任何不成功的响应都有failfast行为,如果一切都成功,那么我将返回上一个成功的响应,如下面的代码所示.

for(int i=0;i<input.size(); i++){
   Data data = service.getData(input.get(i));
   if(data.isSuccessful() && i==input.size()-1){
      return data;
   }else if(!data.isSuccessful()){
    return data;
    }else{
    return null;
  }
 }
Run Code Online (Sandbox Code Playgroud)

我试图用流替换上面提到的代码,但是到目前为止还没能做到.主要问题是我无法模仿java8流代码中的i(索引)变量行为.

resp = input.stream().map((input)->{service.getData()}).filter(
(resp)->{
     if(!resp.isSuccessful())
        return true; 
     else if(resp.isSuccessful() && last resp)//if somehow I figure out last element
        return true;
     else 
        return false;}).findFirst();
Run Code Online (Sandbox Code Playgroud)

lambda java-8 java-stream

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

Java8 Stream作为一个整体映射到一个Function

我想知道是否有更好的方法来重写groupA方法与lambda作为链接操作的一部分?

public class Id {
    private final int value;
    public Id(int value) {
       this.value = value;
    }

    public int value() {
       return value;
    }
}

public class Ids implements Iterable<Id> { 
   private final List<Id> ids;

   private Ids(List<Id> ids) {
      this.ids = ids;
   }

   public static Ids of(List<Id> ids) {
      return new Ids(ids);
   }

   public Ids groupA() {
      return Ids.of(ids.stream()
                       .filter(id -> id.value() > 5)
                       .collect(Collectors.toList()));
   }

   @Override
   public Iterator<Id> iterator() {
      return ids.iterator();
   }
}
Run Code Online (Sandbox Code Playgroud)

基本上我想做点什么

ids.stream()
   .filter(id -> id …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

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

使用索引迭代IntStream

是否可以IntStream使用索引迭代int数组?

试着这样做:

ByteBuf buf = ...;
int[] anArray = ...;

IntStream.of(anArray).forEach(...); // get index so I can do "anArray[index] = buf.x"
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

使用apache数学获得分数

我正在使用Apache Math DescriptiveStatistics对被ArrayList<double>调用的做一些计算scores。中的值之一scoresdouble称为的单独值中myScore。如何使用Apache Math查找百分位数myScore

这是我的第一次尝试,但是它很麻烦,必须有一种更简单的方法:

int percentile = 0;
DescriptiveStatistics stats = new DescriptiveStatistics();
double[] values = getValues(scores, minval, maxval);
// Add the data from the array
for( int i = 0; i < values.length; i++) {
    stats.addValue(values[i]);
}
for(int j=0; j<101; j++){
    if(stats.getPercentile(j)>myScore && stats.getPercentile<myScore){
        percentile = j;
    }
}
Run Code Online (Sandbox Code Playgroud)

java math statistics percentile

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

Java8中列表中的项目对的并行处理

在中Java8,让List<Item> list我按以下顺序进行处理:

ConcurrentMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
for (int i1 = 0; i1 < list.size() - 1; i1++) {
    Item item1 = list.get(i1);
    for (int i2 = i1 + 1; i2 < list.size(); i2++) {
        Item item2 = list.get(i2);
        doSomething(item1, item2);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我处理列表中所有有序的项目对(索引item1<的索引,<的索引item2)。现在,我想doSomething(item1, item2)为每个有序对并行运行函数。实现这一目标的最佳策略是什么?对最快的代码感兴趣。Java8流欢迎。

doSomething比如做:map.put(item1.key + " " + item2.key, item1.val + item2.val);

有序对的数量n * (n - 1) / 2,其中 …

java parallel-processing list java-8 java-stream

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

在多线程情况下使用限制流的最佳方式性能

我观看了JoséPaumard在InfoQ上的演讲:http: //www.infoq.com/fr/presentations/jdk8-lambdas-streams-collectors(法语)

问题是我被困在这一点上.要使用流多线程收集1M Long ,我们可以这样做:

Stream<Long> stream = 
  Stream.generate(() -> ThreadLocalRandom.current().nextLong()) ;

List<Long> list1 = 
  stream.parallel().limit(10_000_000).collect(Collectors.toList()) ;
Run Code Online (Sandbox Code Playgroud)

但考虑到线程总是在检查上述限制以阻碍性能.

在那次演讲中我们也看到了第二个解决方案:

Stream<Long> stream = 
  ThreadLocalRandom.current().longs(10_000_000).mapToObj(Long::new) ;

List<Long> list = 
  stream.parallel().collect(Collectors.toList()) ;
Run Code Online (Sandbox Code Playgroud)

它似乎是更好的表现.

所以这是我的问题:为什么第二个代码更好,是否有更好的,或者至少成本更低的方法呢?

java random multithreading java-8 java-stream

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

Java:拆分逗号分隔的字符串但忽略括号中的逗号

我有一个这样的字符串:

one,two,3,(4,five),six,(seven),(8,9,ten),eleven,(twelve,13,14,fifteen)

上面的字符串应该拆分为:

one
two
3
(4,five)
six
(seven)
(8,9,ten)
eleven
(twelve,13,14,fifteen)
Run Code Online (Sandbox Code Playgroud)

java regex string split

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