我正在尝试按length对字符串列表进行分组。然后我想计算每组的数量。我做了第一个,但我不能做下一个。如何使用流修复我的代码?
Stream.of(Stream.of("Brad","Jack","Leonardo","Alexander","Juliet","William","Audrey")
.collect(Collectors.groupingBy(String::length)))
.forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
输出:{4=[布拉德,杰克],6=[朱丽叶,奥黛丽],7=[威廉],8=[莱昂纳多],9=[亚历山大]}
我想要得到的下一件事是每组的计数。我怎样才能做到这一点?
在Java中,如何使用列表中的列表来映射和获取类成员列表。
public class CustomerSales {
public List<Product> productList;
....
}
public class Product {
public List<ProductSubItem> productSubItemList
....
}
public class ProductSubItem {
public String itemName;
Run Code Online (Sandbox Code Playgroud)
试图:
然而,这并没有得到itemName。我正在寻找一种干净有效的方法,理想情况下可能想尝试 4-5 级深度,但为了简单起见,问题只有 3 级,等等
List<String> itemNameList = customerSales.productList.stream()
.map(p -> p.productSubItemList())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我正在使用 Java 8。
尝试使用此资源:仍然不走运,如何使用 Java 8 Stream 从某些类属性中获取列表?
如何使用 Java 8 流对列表列表中的每个元素求和?
例如,我在一个列表中有 3 个不同的列表,我试图对每个列表中的每个元素求和并创建另一个列表。我是 Java 8 的新手,尝试使用 Stream API 解决一些问题:
List<List<Integer>> cases = Arrays.asList(
Arrays.asList(1, 1, 2),
Arrays.asList(3, 3, 2),
Arrays.asList(4, 5, 1));
Run Code Online (Sandbox Code Playgroud)
我想要实现的输出:
{[4,8,10]}
Run Code Online (Sandbox Code Playgroud) 我是 Java 新手,第一次尝试 Streams。
我有一个很大的输入文件,每行都有一个字符串,例如:
cart
dumpster
apple
cherry
tank
laptop
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试将文件作为流读取并对数据进行一些分析。例如,要计算特定字符串的所有出现次数,我可能会考虑执行以下操作:
Stream<String> lines = Files.lines(Path.of("/path/to/input/file.txt"));
int count = 0;
lines.forEach((line) => {
if (line.equals("tank")) {
count++;
}
});
Run Code Online (Sandbox Code Playgroud)
但是,Java 不允许 lambda 内的变量发生变化。
我不确定是否还有另一种方法可以从流中逐行读取。我该如何正确地做到这一点?
从长远来看,下面的代码片段总是会导致内存不足错误,尤其是在读取非常庞大的文件/内容时。
有没有另一种方法可以重写它,特别是使用流?
我在这里看到了一种将字节数组转换为十六进制字符串的方法:Effective way to get hex string from a byte array using lambdas and Streams
public static byte[] hexStringToBytes(String hexString) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Hex string to convert to byte[] " + hexString);
}
byte[] buf = new byte[hexString.length() / 2];
String twoDigitHexToConvertToByte;
for (int i = 0; i < buf.length; i++) {
twoDigitHexToConvertToByte = extractPairFromStringBasedOnIndex(hexString, i);
parseStringToBytesAndStoreInArrayOnIndex(twoDigitHexToConvertToByte, buf, i);
}
return buf;
}
private static void parseStringToBytesAndStoreInArrayOnIndex(String twoDigitHexToConvertToByte, byte[] buf, int i) {
try {
buf[i] = …Run Code Online (Sandbox Code Playgroud) 我有一个List<Stream<String>>通过一系列交易得到的。列表大小是动态的(最多 3 个元素),所以我不能这样做:
Stream<String> finalStream = Stream.concat(list.get(0),Stream.concat(list.get(1),list.get(2));
Run Code Online (Sandbox Code Playgroud)
我需要将 Streams 列表连接成一个Stream<String>. 有什么简单的方法可以做到这一点吗?
在 Java Stream API 定义中,它说“Stream API 用于处理对象集合。流是支持各种可以通过管道传输的方法的对象序列”以产生所需的结果”。
在这个定义中,管道化的含义是什么?
我有一张这样的地图。Map<long,List<Student>> studentMap
键是数字 1,2,3,4...学生对象是:
public class Student {
private long addressNo;
private String code;
private BigDecimal tax;
private String name;
private String city;
// getter and setters`
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是将其转换为Map<long,List<StudentInfo>> studentInfoMap对象和组 ID、地址号和代码字段。
我可以使用这些代码对地图进行分组,但 summingDouble 不适用于 BigDecimal。此外,我无法将我的 StudentMap 转换为 StudentInfoMap。:(
studentInfoMap.values().stream()
.collect(
Collectors.groupingBy(StudentInfo::getCode,
Collectors.groupingBy(StudentInfo::getAddressNo,
Collectors.summingDouble(StudentInfo::getTax))));
Run Code Online (Sandbox Code Playgroud)
我的 StudentInfo 对象是:
public class StudentInfo {
private long addressNo;
private String code;
private BigDecimal tax;
// getter and setters`
}
Run Code Online (Sandbox Code Playgroud) 我有一个流,其中每个对象都由唯一的 id 标识。此外,每个对象都有正值或负值Free。
我想将此流分为两个集合,其中一个包含值为ids正Free的值,另一个包含其余值。
但我发现以下方法不是正确的方法,因为我正在将数据收集到流之外的列表中。
class Foo {
int free;
long id;
}
public Tuple2<Set<Long>, Set<Long>> findPositiveAndNegativeIds() {
Set<Long> positives = new HashSet<>();
Set<Long> negatives = new HashSet<>();
foos.stream()
.forEach(f -> {
if (f.free >= 0) positigves.add(f.id);
else negatives.add(f.id);
});
return Tuple2.tuple(positives, negatives);
}
Run Code Online (Sandbox Code Playgroud)
partitionBy()可以通过某种方式或类似方式做得更好吗?
我有这个代码:
private Iterable<Practitioner> pickPractitioners(List<String> ids) {
return Optional.ofNullable(ids)
.map(List::stream)
.orElse(Stream.of())
.collect(
Collectors.collectingAndThen(
Collectors.toList(),
this.practitionerRepository::findAllById
)
);
}
Run Code Online (Sandbox Code Playgroud)
问题是当ids为空时,this.practitionerRepository::findAllById也会被执行。
如果生成的收集器为空,我想避免此步骤。
有任何想法吗?