我需要按列表中每个对象的某个属性对列表进行排序.这是大多数语言支持的标准操作.
但是,还有一些要求,即某些项目可能依赖于其他项目,因此,在它们依赖的项目首先出现之前,不得出现在排序列表中,即使这需要违反正常的排序顺序.任何此类"被阻止"的项目应该在项目"阻止"它被添加到输出列表的那一刻出现在列表中.
如果我有物品:
[{'a',6},{'b',1},{'c',5},{'d',15},{'e',12},{'f',20},{'g',14},{'h',7}]
通常通过数值对这些进行排序将得到:
[{'b',1},{'c',5},{'a',6},{'h',7},{'e',12},{'g',14},{'d',15},{'f',20}]
但是,如果强制执行以下约束:
然后这个结果无效.相反,结果应该是:
[{'b',1},{'c',5},{'h',7},{'e',12},{'a',6},{'d',15},{'g',14},{'f',20}]
其中b,c,d,e,f和h按正确顺序b,c,h,e,d和f排序; 两者一和克得到了延迟,直到Ë和ð分别已输出; 并且c不需要延迟,因为它所依赖的值b已经输出了.
最初我调查了是否可以使用基本的Java比较器,其中比较器实现类似于:
private Map<MyObject,Set<MyObject>> dependencies; // parent to set of children
public int compare(MyObj x, MyObj y) {
if (dependencies.get(x).contains(y)) { …
Run Code Online (Sandbox Code Playgroud) 我希望在顶部和底部围绕圆的半径绘制轮廓文本,文本的两个部分都面向正确的方向。
如何在AWT中绘制文本周围的轮廓?和用 Java 沿着曲线编写文本帮助我创建了代码(如下),该代码将逐个字符地绘制文本,其中每个字符独立旋转(有一些小的图形故障,这将是另一个问题的主题) 。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class CreateTextStackOverflow {
private static final int EDGE_GAP = 10;
public static void main(String[] args) throws IOException {
BufferedImage bi = new BufferedImage(364,364,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D)bi.getGraphics();
Font font = new Font("Arial",Font.BOLD,48);
FontMetrics fm = g.getFontMetrics(font);
int imageWidth = bi.getWidth();
int …
Run Code Online (Sandbox Code Playgroud)