我有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) 我有一个项目集合
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 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)
有办法做我想要的吗?
假设我有一个品牌对象列表.POJO包含一个返回字符串的getName().我想Map<String, Brand>
用String作为名称来构建一个
...但我希望密钥不区分大小写.
如何使用Java流来完成这项工作?试:
brands.stream().collect(Collectors.groupingBy(brand -> brand.getName().toLowerCase()));
Run Code Online (Sandbox Code Playgroud)
不起作用,我认为是因为我没有正确使用groupBy.
所以我试图仅使用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)
任何帮助表示赞赏:)
是否可以根据其他列表中的条目减少列表?
这是类似的东西:
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) 我有两种类型的处理实现.不确定为什么流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) 鉴于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:
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异常,我不确定如何(因为它是一个列表)或为什么.
在下面的代码中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我无法理解的问题.