Java 计算要列表的字符串映射中的所有元素
是否有更好的方法来计算地图中所有列表的大小?那么Java 计算要列表的字符串映射中的所有元素,java,java-8,java-stream,Java,Java 8,Java Stream,是否有更好的方法来计算地图中所有列表的大小?那么firstList.size()+secondList.size()? 我已经这样做了,但是仅仅为了计数而创建一个列表并不是一个正确的方法 public static void main(String[] args) { List<String> firstList = new ArrayList<>(); firstList.add("first"); List<String> seco
firstList.size()+secondList.size()
?
我已经这样做了,但是仅仅为了计数而创建一个列表并不是一个正确的方法
public static void main(String[] args) {
List<String> firstList = new ArrayList<>();
firstList.add("first");
List<String> secondList = new ArrayList<>();
secondList.add("second");
Map<String, List<String>> myMap = new HashMap<>();
myMap.put("one", firstList);
myMap.put("two", secondList);
int size = myMap.entrySet().stream()
.map(entry -> entry.getValue())
.flatMap(list -> list.stream())
.collect(Collectors.toList())
.size();
System.out.println("Size of all elements in map is:" + size);
}
publicstaticvoidmain(字符串[]args){
List firstList=新建ArrayList();
第一个列表。添加(“第一个”);
List secondList=new ArrayList();
第二个列表。添加(“第二个”);
Map myMap=newhashmap();
myMap.put(“一”,第一个列表);
myMap.put(“两个”,第二个列表);
int size=myMap.entrySet().stream()
.map(条目->条目.getValue())
.flatMap(列表->列表.stream())
.collect(收集器.toList())
.size();
System.out.println(“地图中所有元素的大小为:“+Size”);
}
这至少更具可读性
int size = myMap.values().stream()
.mapToInt(Collection::size)
.sum();
或者,如果您希望看起来像一个函数式编程大师,请使用:
int size2 = myMap.values().stream()
.reduce(0, (acc, val) -> acc + val.size(), Integer::sum);
编辑:使用.values()
:]前面的两个答案都很好,但是如果直接使用
值()
,而不是迭代entrySet()
,可以将答案缩短一点:
//流媒体版本
int size=myMap.values().stream()
.mapToInt(列表->列表.size())
.sum();
//标准循环版本
int size=0;
对于(列表:myMap.values())
size+=list.size();
另一种方式:
private static int size = 0;
public static void main(String[] args) {
List<String> firstList = new ArrayList<>();
firstList.add("first");
List<String> secondList = new ArrayList<>();
secondList.add("second");
Map<String, List<String>> myMap = new HashMap<>();
myMap.put("one", firstList);
myMap.put("two", secondList);
myMap.values().forEach(value -> {size += value.size();});
System.out.println("Size of all elements in map is:" + size);
}
private static int size=0;
公共静态void main(字符串[]args){
List firstList=新建ArrayList();
第一个列表。添加(“第一个”);
List secondList=new ArrayList();
第二个列表。添加(“第二个”);
Map myMap=newhashmap();
myMap.put(“一”,第一个列表);
myMap.put(“两个”,第二个列表);
myMap.values().forEach(value->{size+=value.size();});
System.out.println(“地图中所有元素的大小为:“+Size”);
}
让我把这个弄清楚。您想获取地图中所有列表的大小吗?所以本例中的firstList.size()+secondList().size?关闭,但为什么还要处理Map.Entry对象呢?如果你想看起来像一个函数式编程大师,为什么不干脆myMap.values().stream().mapToInt(Collection::size).sum()
private static int size = 0;
public static void main(String[] args) {
List<String> firstList = new ArrayList<>();
firstList.add("first");
List<String> secondList = new ArrayList<>();
secondList.add("second");
Map<String, List<String>> myMap = new HashMap<>();
myMap.put("one", firstList);
myMap.put("two", secondList);
myMap.values().forEach(value -> {size += value.size();});
System.out.println("Size of all elements in map is:" + size);
}