鉴于我有一些函数需要两个参数并返回一个值,是否可以将Map转换为Stream中的List作为非终端操作?最近的I cam找到的是在地图上使用forEach来创建实例并将它们添加到预定义的List中,然后从该List开始一个新的Stream.还是我错过了什么?
例如:经典"在一些长词中找到3个最常出现的单词"
wordList.stream().collect(groupingBy(Function.identity, Collectors.counting))).
Run Code Online (Sandbox Code Playgroud)
(现在我想流式传输那个地图的entrySet)
sorted((a,b) -> a.getValue().compareTo(b.getValue))).limit(3).forEach(print...
Run Code Online (Sandbox Code Playgroud) 让我们说我们必须使用这段无聊的代码:
ArrayList<Long> ids = new ArrayList<Long>();
for (MyObj obj : myList){
ids.add(obj.getId());
}
Run Code Online (Sandbox Code Playgroud)
切换到Java 8后,我的IDE告诉我我可以用这个代码替换collect call它,并自动生成:
ArrayList<Long> ids = myList.stream().map(MyObj::getId).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是它给了我这个错误:
Steam中的collect(java.util.stream.Collector)无法应用于:(java.util.stream.Collector,capture,java.util.List>)
我试图铸造参数,但它给我不确定的A和R,而IDE没有给任何建议.
我很好奇你collect call在这种情况下如何使用,我找不到任何可以指导我的信息.任何人都可以光明吗?
在学习Java 8流和lambas时,我尝试用流替换以下嵌套for循环:
List<Long> deskIds = new ArrayList<>();
for(ProvidedService memberService : service.getAllNodesDepthFirst()){
for(Desk d : memberService.getDesks()){
deskIds.add(d.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
循环迭代一个'ProvidedService'对象列表,并为每个对象迭代'Desk'对象的list属性,并将'Id'字段提取到列表中.
我使用流来提出以下代码:
List<Long> deskIds = new ArrayList<>();
service.getAllNodesDepthFirst().stream().forEach(srv -> {
deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});
Run Code Online (Sandbox Code Playgroud)
这是正确/最佳的方式吗?或者有没有办法在没有第二个嵌套流的情况下执行此操作?
我的问题可能过于宽泛,可能答案很简单,但我不得不问.
Java 7中是否有(Java 8)流*的等效实现?
我熟悉(Java 8)流,但我的项目要求是使用Java 7.
*不要与inputStream和outputStream混淆.
我想知道,如果流(或收集器)中已经有一个已实现的功能,它已将列表排序为值.例如,以下代码均生成按年龄分类的按性别分组的人员列表.第一个解决方案有一些开销排序(看起来有点邋)).第二个解决方案需要两次看每个人,但是以一种漂亮的方式完成工作.
首先排序然后在一个流中分组:
Map<Gender, List<Person>> sortedListsByGender = (List<Person>) roster
.stream()
.sorted(Person::compareByAge)
.collect(Collectors.groupingBy(Person::getGender));
Run Code Online (Sandbox Code Playgroud)
首先分组,然后对每个值进行排序:
Map<Gender, List<Person>> sortedListsByGender = (List<Person>) roster
.stream()
.collect(Collectors.groupingBy(Person::getGender));
sortedListsByGender.values()
.forEach(list -> Collections.sort(list, Person::compareByAge));
Run Code Online (Sandbox Code Playgroud)
我只是想知道,如果已经有一些实现的东西,它会在一次运行中完成,例如groupingBySorted.
假设我有这两个矩阵:
double[][] a = new double[2][2]
a[0][0] = 1
a[0][1] = 2
a[1][0] = 3
a[1][1] = 4
double[][] b = new double[2][2]
b[0][0] = 1
b[0][1] = 2
b[1][0] = 3
b[1][1] = 4
Run Code Online (Sandbox Code Playgroud)
以传统方式,总结这个矩阵我会做一个嵌套for循环:
int rows = a.length;
int cols = a[0].length;
double[][] res = new double[rows][cols];
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
res[i][j] = a[i][j] + b[i][j];
}
}
Run Code Online (Sandbox Code Playgroud)
我对流API很新,但我认为这非常适合使用,parallelStream所以我的问题是,如果有办法做到这一点并利用并行处理?
编辑:不确定这是不是正确的地方,但我们走了:使用一些建议我把Stream推到测试.设置如下:经典方法:
public class ClassicMatrix …Run Code Online (Sandbox Code Playgroud) I have an class A with multiple List members.
class A {
List<X> xList;
List<Y> yList;
List<Z> zList;
// getters and setters
}
class X {
String desc;
String xtype;
// getters and setters
}
class Y {
String name;
String ytype;
//getters and setters
}
class Z {
String description;
String ztype;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
And a class B with just 2 attributes:
class B {
String name;
String type;
}
Run Code Online (Sandbox Code Playgroud)
I need to iterate through the …
在https://java-programming.mooc.fi/part-10/2-interface-comparable上做练习“文学”时,我在尝试对 HashMap 中的键值对进行排序时发现了一个非常奇怪的行为,而没有将任何内容复制到一个树形图。我应该通过创建 Book 类并将它们添加到 List 来添加书籍。但是我想在不创建新类的情况下尝试,所以选择了 HashMap。我的代码如下:
public class MainProgram {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Integer> bookshelf = new HashMap<>();
while (true) {
System.out.println("Input the name of the book, empty stops: ");
String bookName = scanner.nextLine();
if (bookName.equals("")) {
break;
}
System.out.println("Input the age recommendation: ");
int age = Integer.valueOf(scanner.nextLine());
bookshelf.put(bookName, age);
}
System.out.println(bookshelf.size() + " book" + (bookshelf.size() > 1 ? "s" : "") + " in total."); …Run Code Online (Sandbox Code Playgroud) 我有一个简单的课程:
public class Rule {
int id;
long cableType;
}
Run Code Online (Sandbox Code Playgroud)
我想将包含此类对象的列表转换为Map<Integer, Long>,所以我编写了代码:
Map<Integer, Long> map = ruleList.stream().collect(Collectors.toMap(Rule::getId, Rule::getCableType));
Run Code Online (Sandbox Code Playgroud)
该列表有一个重复项(1, 10), (1,40),当我运行此代码时,我收到此异常:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 21 (attempted merging values 31 and 30)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我正在尝试使用Java 8的新功能(例如s)从Hacker Rank站点的Bit Manipulation部分解决以下问题.Stream
问题描述:
给定一个整数n,找到每个x,使得:
- 0 <= x <= n
- n + x = n ^ x
其中^表示按位XOR运算符.然后打印一个整数,表示满足上述条件的x的总数.
约束
- 0 <= n <= 10 15
样本输入: 5
样本输出: 2
说明:
对于n = 5,x值0和2满足条件:
- 5 + 0 = 5 ^ 0 = 5
- 5 + 2 = 5 ^ 2 = 7
因此,我们打印2作为我们的答案.
样本输入: 10
样本输出: 4
说明: 对于N = 10,该X值0 …