标签: java-stream

如何通过java中的流获取map列表值的大小

我正在尝试按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 java-stream

1
推荐指数
1
解决办法
936
查看次数

Java:获取类成员列表,用于多级嵌套列表中的列表

在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 list java-8 java-stream

1
推荐指数
1
解决办法
322
查看次数

如何使用流对列表列表中的每个元素求和?

如何使用 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 java-stream

1
推荐指数
2
解决办法
1513
查看次数

Java:在没有forEach的情况下逐行处理流?

我是 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 内的变量发生变化。

我不确定是否还有另一种方法可以从流中逐行读取。我该如何正确地做到这一点?

java java-stream

1
推荐指数
1
解决办法
525
查看次数

有没有办法使用Java流将十六进制字符串转换为字节?

从长远来看,下面的代码片段总是会导致内存不足错误,尤其是在读取非常庞大的文件/内容时。

有没有另一种方法可以重写它,特别是使用流?

我在这里看到了一种将字节数组转换为十六进制字符串的方法: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)

lambda hex stream java-8 java-stream

1
推荐指数
1
解决办法
614
查看次数

将流列表合并为一个流

我有一个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 concatenation java-stream

1
推荐指数
1
解决办法
1064
查看次数

Java Streams 中的“管道”是什么意思?

在 Java Stream API 定义中,它说“Stream API 用于处理对象集合。流是支持各种可以通过管道传输的方法的对象序列”以产生所需的结果”。

在这个定义中,管道化的含义是什么?

java java-stream

1
推荐指数
1
解决办法
837
查看次数

将地图值转换为另一个地图对象

我有一张这样的地图。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)

java hashmap java-stream

1
推荐指数
1
解决办法
2875
查看次数

如何按对象字段将流分为两组?

我有一个流,其中每个对象都由唯一的 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()可以通过某种方式或类似方式做得更好吗?

java java-stream

1
推荐指数
1
解决办法
421
查看次数

Java 流;避免 Collectors.collectingAndThen 上的完成程序

我有这个代码:


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也会被执行。

如果生成的收集器为空,我想避免此步骤。

有任何想法吗?

java java-stream

1
推荐指数
1
解决办法
843
查看次数

标签 统计

java-stream ×10

java ×9

java-8 ×2

concatenation ×1

hashmap ×1

hex ×1

lambda ×1

list ×1

stream ×1