我有一个: List<Map<String, Long>> items = new ArrayList<>();
我想得到一个Map,其中键被分组,值是总和.
示例:列表
结果:地图
我知道如何以"长"方式执行此操作,但尝试使用java 8功能发现lambda/streaming/groupby方法.有什么想法吗?
我有哈希图: 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()..)?
我正在尝试转换List为HashMap使用流.这是我的代码..
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则可以添加空字符串.可能吗?如果没有,为什么呢?请帮忙.
我想对任何不成功的响应都有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) 我想知道是否有更好的方法来重写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) 是否可以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) 我正在使用Apache Math DescriptiveStatistics对被ArrayList<double>调用的做一些计算scores。中的值之一scores在double称为的单独值中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) 在中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,其中 …
我观看了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)
它似乎是更好的表现.
所以这是我的问题:为什么第二个代码更好,是否有更好的,或者至少成本更低的方法呢?
我有一个这样的字符串:
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 ×9
java-8 ×8
java-stream ×7
lambda ×3
list ×2
collections ×1
dictionary ×1
hashmap ×1
math ×1
percentile ×1
random ×1
regex ×1
split ×1
statistics ×1
string ×1