- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是这里的初学者,试图为我的一个项目制定一些流语法。我的项目是一个拼字游戏单词值计数器,其中我有一个方法使用 HashMap 来存储字母及其值,而我有一个 String 数组来存储需要处理的单词。使用流,我能够获取单词的前三个和平均值。我目前在尝试查找时遇到问题:
如何使用 partitioningBy 方法将值拆分为高于和低于平均值?请记住,这必须通过 Streams 完成。
到目前为止,这是我的代码:
import java.util.Arrays;
import java.util.HashMap;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class scrabble {
public static int scrapleVal(String word)
{
Map<Character, Integer> letterValues = new HashMap<>();
letterValues.put('a', 1);
letterValues.put('b', 3);
letterValues.put('c', 3);
letterValues.put('d', 2);
letterValues.put('e', 1);
letterValues.put('f', 4);
letterValues.put('g', 2);
letterValues.put('h', 4);
letterValues.put('i', 1);
letterValues.put('j', 8);
letterValues.put('k', 5);
letterValues.put('l', 1);
letterValues.put('m', 3);
letterValues.put('n', 1);
letterValues.put('o', 1);
letterValues.put('p', 3);
letterValues.put('q', 10);
letterValues.put('r', 1);
letterValues.put('s', 1);
letterValues.put('t', 1);
letterValues.put('u', 1);
letterValues.put('v', 8);
letterValues.put('w', 4);
letterValues.put('x', 8);
letterValues.put('y', 4);
letterValues.put('z', 10);
return word.toLowerCase().chars().map(e->letterValues.get((char)e)).sum();
}
public static void main(String[] args) {
String [] words = {"Java", "program", "list", "string", "unix",
"hours", "syntax", "error"};
//top three words
System.out.println("Top three words are: ");
Stream.of(words).sorted((e1,e2)->scrapleVal(e2)-scrapleVal(e1)).limit(3).forEach
(e->System.out.println(e+" : "+scrapleVal(e)));
//average word value
System.out.println("\nAverage value fo words is: ");
double averageScrapleValue = Stream.of(words)
.mapToInt(scrabble::scrapleVal).average().orElse(0.0);
System.out.println(averageScrapleValue);
//above average words
Stream.of(words).collect(Collectors
.partitioningBy((scrabble::scrapleVal) > averageScrapleValue)).forEach
(e->System.out.println(e+" : "+scrapleVal(e)));
//below average words
Stream.of(words).collect(Collectors
.partitioningBy((scrabble::scrapleVal) < averageScrapleValue)).forEach
(e->System.out.println(e+" : "+scrapleVal(e)));
}
}
最佳答案
在partitioningBy
Map<Boolean, List<String>>
map = Stream.of(words).collect(Collectors
.partitioningBy(w -> scrapleVal(w) < averageScrapleValue));
此处 map.get(true)
给出低于平均水平的词,map.get(false)
给出等于和高于平均水平的词。
List<String> bellowAvg = map.get(true);
List<String> aboveAndEqualAvg = map.get(false);
输出:
[list, string, hours, error]
[Java, program, unix, syntax]
关于java - 您如何在流中使用 PartitioningBy 来查找高于和低于平均值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63217039/
我已经订购了 LocalDateTime 列表,我需要在特定日期的午夜将其拆分。不应更改两个新列表中元素的顺序。 List l = Arrays.asList(LocalDateTime.of(201
我是这里的初学者,试图为我的一个项目制定一些流语法。我的项目是一个拼字游戏单词值计数器,其中我有一个方法使用 HashMap 来存储字母及其值,而我有一个 String 数组来存储需要处理的单词。使用
我最近一直在我的代码中尽可能多地使用流,但我遇到了一个我还没有完全解决的问题。 我有一个名为“Listing”的简单类: package models; public class House { pr
在这个例子中 Streamstream = Stream.of(new MyClass(5),new MyClass(15),new MyClass(8),new MyClass(12)); Map>
我有一个像下面这样的对象: public class Resource { int level; String identifier; boolean isEducational; p
我有一个像下面这样的对象: public class Resource { int level; String identifier; boolean isEducational; p
partitioningBy收集器将谓词应用于流中的每个元素,并生成从 boolean 值到流中满足或不满足谓词的元素列表的映射。例如: Stream.of(1,2,3,4).collect(part
我是一名优秀的程序员,十分优秀!