我试图通过反向顺序(忽略大小写)对字符串数组进行排序,而不进行修改,只打印它.所以我使用的是Java8流.但我无法做到这一点.
这是我的尝试:
package experimentations.chapter02;
import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;
public class StringStream {
public static void main(String[] args) {
sortStrings();
}
public static void sortStrings(){
String[] stringsArray = "The quick brown fox has a dirty ladder".split("\\s+");
System.out.println(
Arrays.stream(stringsArray)
.sorted(Comparator.comparing(String::toLowerCase).reversed())
.collect(Collectors.toList())
);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是String::toLowerCase静态方法不接受Comparator.comparing.
同时,我设法对数组进行排序,但修改它:
public static void sortStrings(){
String[] stringsArray = "The quick brown fox has a dirty ladder".split("\\s+");
System.out.println(
Arrays.stream(stringsArray)
.map(String::toLowerCase)
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList())
);
}
Run Code Online (Sandbox Code Playgroud)
那么,最简单的解决方法是什么?
假设我有一个布尔值流,我正在编写的reduce操作是||(OR).我能否以一种方式编写它,以便在true遇到值时至少放弃对某些元素的评估?
我正在寻找一些优化(可能是它是一个并行流),不一定是完全优化,虽然后者会很棒.
在这种情况下,只有奇数行具有有意义的数据,并且没有唯一标识这些行的字符.我的目的是获得与以下示例等效的内容:
Stream<DomainObject> res = Files.lines(src)
.filter(line -> isOddLine())
.map(line -> toDomainObject(line))
Run Code Online (Sandbox Code Playgroud)
没有共享全球状态,有没有"干净"的方式去做?
如何计算加权平均值,Map<Double, Integer>其中整数值是要平均的Double值的权重.例如:Map有以下元素:
我希望使用Java 8流应用以下公式,但不确定如何一起计算分子和分母并同时保留它.如何在这里使用减少?
我有一个字符串列表:
List<String> list = Arrays.asList("a1,a2", "b1,b2");
Run Code Online (Sandbox Code Playgroud)
然后转换列表中的所有内容,如:"a1","a2","b1","b2"写道:
List<String> ss1 = list.stream()
.flatMap(s -> Stream.of(s.split(",")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但我有一个错误:"类型不匹配:无法转换List<Serializable>为List<String>".我把问题改成了这个:
List<String> ss2 = list.stream()
.flatMap(s -> Arrays.stream(s.split(",")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
Eclipse Neon表明不同之处在于flatMap返回类型.首先flatMap返回List<Serializable>第二个返回a List<String>.
但两者Stream.of()并Arrays.stream()返回<T> Stream<T>(Eclipse的建议,他们都回报Stream<String>).
再次,Stream.of()内部使用(并返回输出)Arrays.stream().那么,第一种情况又是怎么回事呢?
例如,您有一个要转换为JSONObject的pojo列表.你有一个pojo列表.但是为了转换为JSONObject,您需要使用JSONObject put方法.
JSONObject personJson = new JSONObject();
for(Person person : personList){
personJson.put("firstName", person.firstName);
personJson.put("lastName", person.lastname);
...
}
Run Code Online (Sandbox Code Playgroud)
如果它只是我想做的一项操作,那么我就可以做到
personList.stream.map(personJson.put("firstName", person.firstName));
Run Code Online (Sandbox Code Playgroud) 我有一个流,想检查是否所有匹配过滤器.如果全部匹配,则返回true.
但是,如果流是空的,我想回来false.
我怎样才能做到这一点?
示例代码:
public boolean validate(Stream<Whatever> stream) {
// Problem: returns **true** if stream empty.
// How can **false** be returned if stream is empty?
return stream.allMatch(Whatever::someCheck);
}
Run Code Online (Sandbox Code Playgroud) 我有两个这样的列表实例:
List<NameAndAge> nameAndAgeList = new ArrayList<>();
nameAndAgeList.add(new NameAndAge("John", "28"));
nameAndAgeList.add(new NameAndAge("Paul", "30"));
nameAndAgeList.add(new NameAndAge("Adam", "31"));
List<NameAndSalary> nameAndSalaryList = new ArrayList<>();
nameAndSalaryList.add(new NameAndSalary("John", 1000));
nameAndSalaryList.add(new NameAndSalary("Paul", 1100));
nameAndSalaryList.add(new NameAndSalary("Adam", 1200));
Run Code Online (Sandbox Code Playgroud)
这里NameAndAge是
class NameAndAge {
public String name;
public String age;
public NameAndAge(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
Run Code Online (Sandbox Code Playgroud)
并且NameAndSalary是
private class NameAndSalary {
private String name;
private double …Run Code Online (Sandbox Code Playgroud) 我写了这段代码:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String... args) {
List<String> a = Arrays.asList("One", "Two", "three");
List<Integer> lengths = a.stream().mapToInt(String::length).collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
但它不想编译,说:
Error:(8, 68) java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?为什么有限制?如果你使用地图.它没有mapToInt,而是工作正常.
我有下面的值与哈希值映射,在值中我已经日期为字符串数据类型。我想比较地图中所有可用的日期,并仅提取一个具有最近日期的键值。
我想与值而不是键进行比较。
我已包含以下代码
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "1999-01-01");
map.put("2", "2013-10-11");
map.put("3", "2011-02-20");
map.put("4", "2014-09-09");
map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v));
}
}
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
关键4值2014-09-09