我正在尝试使用 实现以下场景,Stream API
但没有成功。
我有以下图表。键是人的名字,集合是人的朋友的名字(键)。
Map<String, Set<String>> fooGraph
Run Code Online (Sandbox Code Playgroud)
我想根据一个人的朋友数量(受欢迎程度)来排序 ArrayList。
例如,
这是fooGraph
它的价值观
x -> a,b,c
y -> a
z -> a,b,c,d,e,f
t -> a,b,c,d
Run Code Online (Sandbox Code Playgroud)
归根结底,我想要一个基于一个人的受欢迎程度的列表。该列表应如下所示
z, t, x, y
Run Code Online (Sandbox Code Playgroud)
如何实现Stream API
?
请考虑以下代码段:
String msg = null;
do {
msg = login();
} while (!msg.equals("OK"));
Run Code Online (Sandbox Code Playgroud)
我想,当在控制台中显示消息msg
是从不同的"OK"
,例如:ERROR, Try again...!
.我这样做了:
String msg;
do {
msg = login();
if(!msg.equals("OK")){
System.out.println("ERROR, Try again...!");
}
} while (!msg.equals("OK"));
Run Code Online (Sandbox Code Playgroud)
有用.我想知道是否还有其他优雅的方法可以做到这一点.
我必须用Java编写一个程序,通过切换字母'e'和'o'来替换'Hello,World'中的字母,这样程序的输出就是"Holle,Werld".我尝试使用以下代码执行此操作,但已经意识到所有o都是e,而e将保持为e.我知道e正在覆盖o,但我只是不知道如何修复.我现在的输出是'Helle Werld'.再次,我想要"Holle,Werld".谢谢!
import java.util.Scanner;
public class E2U7
{
public static void main(String[] args)
{
String river = "Hello, World";
river = river.replace("e","o");
river = river.replace("o","e");
System.out.print(river);
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个Animal类,我想为每种动物设置不同的类和功能.有两种方法可以做到这一点:
方法覆盖继承:
public class Animal {
public void sound() {}
}
public class Dog extends Animal {
public void sound() {
System.out.println("bark");
}
}
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound();
}
Run Code Online (Sandbox Code Playgroud)通过扩展Animal
抽象类:
abstract public class Animal {
abstract public void sound();
}
public class Dog extends Animal {
public void sound() {
System.out.println("bark");
}
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
}
Run Code Online (Sandbox Code Playgroud)那么为什么我们一直使用抽象类,当第一种方法完成同样的事情时呢?我理解为什么我们使用接口 - 它建立了一个契约,任何实现它的类都必须具有某些方法和属性.但是,当通过简单的继承实现同样的事情时,抽象类的用途是什么?
我正在尝试解码由下面的函数编码的字符串。我尝试通过执行以下操作来反转加密c -= c-i
,但它似乎不起作用。谁能解释一下这是如何工作的?
public static String encode(String message){
StringBuilder b = new StringBuilder();
for(int i = 0;i<message.length();i++){
char c = message.charAt(i);
b.append(c += c+i);
}
return b.reverse().toString();
}
Run Code Online (Sandbox Code Playgroud) 所有,
我有一个对象
public class Device {
public String getUserId() {
return userId;
}
public String getDeviceId() {
return deviceId;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了所有的价值清单
List<Device> uList = getList();
Run Code Online (Sandbox Code Playgroud)
在列表中,我有一个基于userId的重复值现在我要获取“唯一”列表,该列表将删除userId的重复项
我要如何实现它,我是Java的新手
我正在学习Java 8,遇到了一种情况。我必须在哪里遍历字符串列表,然后将它们转换为upperCase。可能的解决方案是流式处理列表。在Intellij的许多建议中,以下两项似乎很有用。
list.stream()
.map(String::toUpperCase)
Run Code Online (Sandbox Code Playgroud)
要么
list.stream().
forEach(p -> p.toUpperCase())
Run Code Online (Sandbox Code Playgroud)
我对使用哪个建议以及所有建议的用例感到困惑。我可以就所有建议使用哪种方法以及如何理解获得帮助吗?
我正在尝试List<Y>
从List<X>
. 这是我的两个类:
public class X {
private String a;
private String b;
private String c;
private String d;
//Getters, setters
}
public class Y {
private String a;
private String b;
//Getters, setters
}
Run Code Online (Sandbox Code Playgroud)
对于 forEach,它将类似于:
List<X> listX = getListX();
List<Y> listY = new ArrayList<>();
listX.forEach( x -> {
Y object_y = new Y();
object_y.set_a(x.get_a());
object_y.set_b(x.get_b());
listY.add(object_y);
});
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以使用 Stream() 执行相同的操作?
我需要通过其中一个参数对Java中的对象列表进行排序.这样可以正常工作,当有平局时,它会维持之前的顺序.
但是,我的目标是移植一些自己排序的丑陋代码,我必须保持相同的行为.在该算法中,它在平局的情况下反转先前的顺序.
例如,如果我想通过int对这些对象进行排序:
{ a, 1}
{ b, 2}
{ c, 1}
Run Code Online (Sandbox Code Playgroud)
我的代码返回:a,c,b
我正在移植的代码返回:c,a,b
我现在的代码是:
final Comparator<MyObj> myComparator =
Comparator.comparingInt(MyObj::getSortWeight)
return myObjList
.stream()
.sorted(myComparator)
.map(//doing some other transformations here)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
是否有一种非hacky方式使其工作方式与旧代码相同?我不想重新发明轮子.
我得到了一串字符串,并希望按长度映射它们
Stream<String> s = Stream.of("aaaa", "a", "aaa", "a", "aaaa", "aa", "aaaaaa", "aa");
Map<Integer, Set<String> result = null;
int i = 0;
result.put(i, s.filter(x -> (x.length() == i));
Run Code Online (Sandbox Code Playgroud)
显然,这不会以这种方式工作,因为我不能多次打开流,并且我无法访问longes String以获得良好的循环.但是我怎么能做到呢?
java ×10
java-stream ×5
arraylist ×2
comparator ×2
abstract ×1
collections ×1
decode ×1
encryption ×1
inheritance ×1
list ×1
oop ×1
sorting ×1