小编shm*_*sel的帖子

通过 Stream API 从地图中获取排序列表

我正在尝试使用 实现以下场景,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

java collections java-stream

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

使用if进行判断

请考虑以下代码段:

           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

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

Java重复使用Replace方法

我必须用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)

java

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

为什么扩展抽象类来改变函数定义,当我可以简单地使用方法重写时?

假设我有一个Animal类,我想为每种动物设置不同的类和功能.有两种方法可以做到这一点:

  1. 方法覆盖继承:

    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)
  2. 通过扩展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)

那么为什么我们一直使用抽象类,当第一种方法完成同样的事情时呢?我理解为什么我们使用接口 - 它建立了一个契约,任何实现它的类都必须具有某些方法和属性.但是,当通过简单的继承实现同样的事情时,抽象类的用途是什么?

java oop inheritance abstract-class abstract

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

在java中解码加密的字符串

我正在尝试解码由下面的函数编码的字符串。我尝试通过执行以下操作来反转加密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)

java encryption decode character-encoding

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

删除ArrayList中的重复对象

所有,

我有一个对象

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 arraylist comparator

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

何时使用map和forEach

我正在学习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)

我对使用哪个建议以及所有建议的用例感到困惑。我可以就所有建议使用哪种方法以及如何理解获得帮助吗?

java java-stream

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

使用 Stream() 从 List&lt;X&gt; 创建一个 List&lt;Y&gt;

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

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

与Java中的稳定排序相反(不稳定?)

我需要通过其中一个参数对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方式使其工作方式与旧代码相同?我不想重新发明轮子.

java sorting comparator java-stream

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

如何按长度映射字符串流

我得到了一串字符串,并希望按长度映射它们

 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 java-stream

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